Dokumentasinya bisa sangat membingungkan, jadi inilah yang "asli "Model Linux:
- di dalam kernel Linux, sesuatu yang dapat dijalankan (&dijadwalkan) disebut "proses",
- setiap proses memiliki Process ID (PID) unik sistem, dan Thread Group ID (TGID),
- proses "normal" memiliki PID=TGID dan tidak ada proses lain yang berbagi nilai TGID ini,
- proses "threaded" adalah proses yang nilai TGID-nya dibagi oleh proses lain,
- beberapa proses yang berbagi TGID yang sama juga berbagi, setidaknya, ruang memori dan penangan sinyal yang sama (terkadang lebih),
- jika proses "threaded" memiliki PID=TGID, itu bisa disebut "thread utama",
- memanggil
getpid()
dari proses apa pun akan mengembalikan TGID-nya (=PID "utas utama"), - memanggil
gettid()
dari proses apa pun akan mengembalikan PID-nya (!), - segala jenis proses dapat dibuat dengan
clone(2)
panggilan sistem, - apa yang dibagikan antar proses diputuskan dengan meneruskan tanda khusus ke
clone(2)
, - nama numerik folder yang dapat Anda cantumkan dengan
ls /proc
sebagai/proc/NUMBER
adalah TGID, - nama numerik folder di
/proc/TGID/task
sebagai/proc/TGID/task/NUMBER
adalah PID, - meskipun Anda tidak melihat setiap PID yang ada dengan
ls /proc
, Anda masih dapat melakukancd /proc/any_PID
.
Kesimpulan :dari sudut pandang kernel, hanya proses yang ada, masing-masing memiliki PID uniknya sendiri, dan yang disebut utas hanyalah jenis proses yang berbeda (berbagi, setidaknya, ruang memori yang sama dan penangan sinyal dengan satu atau beberapa lainnya -s).
Catatan: implementasi konsep "utas" di Linux telah menyebabkan kebingungan kosa kata, dan jika getpid()
berbohong padamu tidak melakukan apa yang Anda pikirkan, itu karena perilakunya mengikuti kompatibilitas POSIX (utas seharusnya menggunakan PID yang sama).
Sama sekali tidak ada perbedaan antara utas dan proses di Linux. Jika Anda melihat clone(2) Anda akan melihat satu set bendera yang menentukan apa yang dibagikan, dan apa yang tidak dibagikan, di antara utas.
Proses klasik hanyalah utas yang tidak berbagi apa pun; Anda dapat membagikan komponen apa yang Anda inginkan di Linux.
Ini tidak terjadi pada implementasi OS lain, di mana terdapat perbedaan yang jauh lebih substansial.
Utas adalah proses di Linux. Mereka dibuat dengan clone
panggilan sistem, yang mengembalikan ID proses yang dapat dikirimi sinyal melalui kill
panggilan sistem, seperti proses. Proses utas terlihat di ps
keluaran. clone
panggilan diteruskan flag yang menentukan berapa banyak lingkungan proses induk yang dibagikan dengan proses utas.