Saya akan membaca buku ini , Pemrograman Linux Lanjut oleh Mark Mitchell, Jeffrey Oldham, dan Alex Samuel. Ini dari tahun 2001, jadi agak tua. Tapi bagaimanapun saya merasa cukup baik.
Namun, saya sampai pada titik ketika ia menyimpang dari apa yang diproduksi Linux saya di output shell. Pada halaman 92 (116 dalam penampil), bab 4.5 Implementasi Utas GNU / Linux dimulai dengan paragraf yang berisi pernyataan ini:
Implementasi utas POSIX pada GNU / Linux berbeda dari implementasi utas pada banyak sistem mirip UNIX lainnya dalam cara yang penting: pada GNU / Linux, utas diimplementasikan sebagai proses.
Ini sepertinya titik kunci dan kemudian diilustrasikan dengan kode C. Output dalam buku ini adalah:
main thread pid is 14608
child thread pid is 14610
Dan di Ubuntu 16.04 saya adalah:
main thread pid is 3615
child thread pid is 3615
ps
output mendukung ini.
Saya kira sesuatu pasti telah berubah antara tahun 2001 dan sekarang.
Sub bab berikutnya pada halaman berikutnya, 4.5.1 Penanganan Sinyal, dibangun berdasarkan pernyataan sebelumnya:
Perilaku interaksi antara sinyal dan utas bervariasi dari satu sistem mirip UNIX ke yang lain. Di GNU / Linux, perilaku ditentukan oleh fakta bahwa utas diimplementasikan sebagai proses.
Dan sepertinya ini akan menjadi lebih penting nanti di buku ini. Bisakah seseorang menjelaskan apa yang terjadi di sini?
Saya pernah melihat yang satu ini. Apakah kernel Linux benar-benar proses kernel? , tapi itu tidak banyak membantu. Saya bingung.
Ini adalah kode 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
mengembalikan apa yang disebut ID grup thread dan untuk mendapatkan ID unik untuk suatu proses yang perlu Anda gunakan gettid
. Namun, selain kernel, kebanyakan orang dan alat akan menyebut grup utas proses, dan menyebut proses utas, untuk konsistensi dengan sistem lain.