Tidak banyak yang bisa dimasukkan ke dalam tubuh.
Tidak banyak yang bisa dimasukkan ke dalam tubuh.
Jawaban:
Proses harus memiliki orang tua (PPID). Kernel, meskipun bukan merupakan proses nyata, tetap membuat beberapa proses nyata seperti setidaknya init, dan memberikan sendiri proses ID 0. Tergantung pada OS, mungkin ditampilkan atau tidak sebagai proses dalam ps
output tetapi selalu ditampilkan sebagai PPID:
misalnya di Linux:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:09 ? 00:00:00 /sbin/init
root 2 0 0 09:09 ? 00:00:00 [kthreadd]
root 3 2 0 09:09 ? 00:00:00 [ksoftirqd/0]
...
pada Solaris:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 Oct 19 ? 0:01 sched
root 5 0 0 Oct 19 ? 11:20 zpool-rpool1
root 1 0 0 Oct 19 ? 0:13 /sbin/init
root 2 0 0 Oct 19 ? 0:07 pageout
root 3 0 1 Oct 19 ? 117:10 fsflush
root 341 1 0 Oct 19 ? 0:15 /usr/lib/hal/hald --daemon=yes
root 9 1 0 Oct 19 ? 0:59 /lib/svc/bin/svc.startd
...
Perhatikan juga bahwa pid 0
(dan -1
dan nilai negatif lainnya dalam hal ini) memiliki arti yang berbeda tergantung pada fungsi yang digunakannya kill
, fork
dan waitpid
.
Akhirnya, sementara init
proses secara tradisional diberikan pid #1
, ini tidak lagi terjadi ketika virtualisasi tingkat OS digunakan seperti zona Solaris, karena mungkin ada lebih dari satu yang init
berjalan:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 4733 3949 0 11:07:25 ? 0:26 /lib/svc/bin/svc.configd
root 4731 3949 0 11:07:24 ? 0:06 /lib/svc/bin/svc.startd
root 3949 3949 0 11:07:14 ? 0:00 zsched
daemon 4856 3949 0 11:07:46 ? 0:00 /lib/crypto/kcfd
root 4573 3949 0 11:07:23 ? 0:00 /usr/sbin/init
netcfg 4790 3949 0 11:07:34 ? 0:00 /lib/inet/netcfgd
root 4868 3949 0 11:07:48 ? 0:00 /usr/lib/pfexecd
root 4897 3949 0 11:07:51 ? 0:00 /usr/lib/utmpd
netadm 4980 3949 0 11:07:54 ? 0:01 /lib/inet/nwamd
Ada dua tugas dengan ID proses yang dibedakan secara khusus: swapper atau sched memiliki ID proses 0 dan bertanggung jawab untuk paging, seperti jlliagre yang dimasukkan dalam contoh sebelumnya, dan sebenarnya merupakan bagian dari kernel daripada proses mode pengguna normal.
ID Proses 1 biasanya merupakan proses init yang terutama bertanggung jawab untuk memulai dan mematikan sistem. Awalnya, ID proses 1 tidak secara khusus dicadangkan untuk init oleh tindakan teknis apa pun: ID proses itu hanya sebagai konsekuensi alami sebagai proses pertama yang dilakukan oleh kernel. Sistem Unix yang lebih baru biasanya memiliki komponen kernel tambahan yang terlihat sebagai 'proses', dalam hal ini PID 1 secara aktif dicadangkan untuk proses init untuk menjaga konsistensi dengan sistem yang lebih lama.
Secara umum, 0 sering digunakan untuk menandakan 'referensi nol'. Ini berarti bahwa meskipun nilai 0 ada, Anda mungkin tidak menggunakannya karena Anda ingin nol untuk menandakan nilai khusus.
pid
0 memiliki arti khusus untukkill(2)
pemanggilan sistem di mana itu berarti saya sendiri dan untuk diwaitpid(2)
mana artinya adalah setiap proses dalam grup proses saya setidaknya. Belum lagi bahwafork()
kembali0
berarti kita berada di dalam anak.