मैं इस पुस्तक के माध्यम से जा रहा हूँ , एडवांस्ड लिनक्स प्रोग्रामिंग मार्क मिशेल, जेफरी ओल्डहम और एलेक्स सैमुअल द्वारा। यह 2001 से है, इसलिए थोड़ा पुराना है। लेकिन मुझे यह किसी भी तरह काफी अच्छा लगता है।
हालाँकि, मुझे एक बिंदु पर मिला जब यह खोल देता है कि मेरा लिनक्स शेल आउटपुट में क्या उत्पन्न करता है। पृष्ठ 92 (दर्शक में 116) पर, अध्याय 4.5 GNU / Linux थ्रेड कार्यान्वयन इस अनुच्छेद वाले पैराग्राफ से शुरू होता है:
GNU / Linux पर POSIX थ्रेड्स का कार्यान्वयन एक महत्वपूर्ण तरीके से कई अन्य UNIX जैसे सिस्टम पर थ्रेड कार्यान्वयन से भिन्न होता है: GNU / Linux पर, थ्रेड को प्रक्रियाओं के रूप में लागू किया जाता है।
यह एक मुख्य बिंदु की तरह लगता है और बाद में एक सी कोड के साथ सचित्र होता है। पुस्तक में आउटपुट है:
main thread pid is 14608
child thread pid is 14610
और मेरे Ubuntu 16.04 में यह है:
main thread pid is 3615
child thread pid is 3615
ps
आउटपुट इसका समर्थन करता है।
मुझे लगता है कि 2001 और अब के बीच कुछ बदल गया होगा।
अगले पृष्ठ पर अगला उपचर्च, 4.5.1 सिग्नल हैंडलिंग, पिछले विवरण पर बनाता है:
संकेतों और थ्रेड्स के बीच बातचीत का व्यवहार एक यूनिक्स-जैसी प्रणाली से दूसरे में भिन्न होता है। जीएनयू / लिनक्स में, व्यवहार को इस तथ्य से निर्धारित किया जाता है कि थ्रेड को प्रक्रियाओं के रूप में लागू किया जाता है।
और ऐसा लग रहा है कि पुस्तक में बाद में यह और भी महत्वपूर्ण होगा। क्या कोई समझा सकता है कि यहाँ क्या हो रहा है?
मैंने देखा है कि क्या लिनक्स कर्नेल थ्रेड वास्तव में कर्नेल प्रक्रियाएं हैं? , लेकिन यह बहुत मदद नहीं करता है। मैं उलझन में हूं।
यह C कोड है:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_function (void* arg)
{
fprintf (stderr, "child thread pid is %d\n", (int) getpid ());
/* Spin forever. */
while (1);
return NULL;
}
int main ()
{
pthread_t thread;
fprintf (stderr, "main thread pid is %d\n", (int) getpid ());
pthread_create (&thread, NULL, &thread_function, NULL);
/* Spin forever. */
while (1);
return 0;
}
getpid
वह रिटर्न देता है जिसे थ्रेड ग्रुप आईडी कहा जाएगा और जिस प्रक्रिया का आपको उपयोग करने की आवश्यकता है उसके लिए एक यूनिक आईडी प्राप्त करना होगा gettid
। हालांकि, कर्नेल के अलावा, अधिकांश लोग और उपकरण एक थ्रेड समूह को एक प्रक्रिया कहेंगे, और एक प्रक्रिया को अन्य सिस्टम के साथ संगतता के लिए एक थ्रेड कहेंगे।