Burada vücutta koymak için çok fazla değil.
Burada vücutta koymak için çok fazla değil.
Yanıtlar:
İşlemlerin bir ebeveyni (PPID) olması gerekir. Çekirdek, gerçek süreç olmama rağmen, yine de en azından init gibi bazı gerçek süreçleri handcrafting edilir ve kendisine o ya bir süreç olarak görüntülenebilir olmayabilir belki OS bağlı işlem kimliğini 0. veriyor ps
çıktı ama her zaman görüntülenir PPID olarak:
örneğin Linux'ta:
$ 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]
...
Solaris'te:
$ 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
...
Pid olması da Not 0
(ve -1
ve bu konuda diğer olumsuz değerler) fonksiyonu kullanımı onlara ne gibi bağlı farklı anlamlara sahiptir kill
, fork
ve waitpid
.
Son olarak, init
süreç geleneksel olarak ödenmesine #1
rağmen, işletim sistemi düzeyinde sanallaştırmanın Solaris bölgeleri gibi kullanıldığı durumlarda, birden fazla işlem yapılabileceği için bu durum geçerli değildir init
:
$ 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
Özel olarak ayırt edilmiş işlem ID'lerine sahip iki görev vardır: takas veya zamanlama ID 0 işlemine sahiptir ve daha önce örneklerde verilen jlliagre gibi sayfalama işleminden sorumludur ve aslında normal bir kullanıcı modu işleminden ziyade çekirdeğin bir parçasıdır.
İşlem Kimliği 1 genellikle sistemin başlatılması ve kapatılmasından sorumlu olan başlangıç sürecidir. Başlangıçta, işlem kimliği 1 herhangi bir teknik önlem tarafından özel olarak başlatılmadı: bu kimliği çekirdeğin başlattığı ilk işlem olmanın doğal bir sonucu olarak görüyordu. Daha yeni Unix sistemleri tipik olarak 'işlemler' olarak görülebilen ilave çekirdek bileşenlere sahiptir; bu durumda, PID 1, init işleminin daha eski sistemlerle tutarlılığını korumak için aktif olarak ayrılmıştır.
Genel olarak 0, 'boş bir referans' belirtmek için sıklıkla kullanılır. Bu, 0 değeri olsa da, özel bir değeri belirtmek için sıfır istediğiniz için kullanmayabileceğiniz anlamına geliyordu.
pid
0, kendim için anlam ifade edenkill(2)
sistem çağrısı ve en azından benim süreç grubumdaki herhangi bir işlem anlamına geldiği için özel bir anlama sahiptir . Geri dönmenin çocuk olduğumuz anlamına geldiğinden bahsetmiyorum bile .waitpid(2)
fork()
0