Não há muito para colocar aqui no corpo.
Não há muito para colocar aqui no corpo.
Respostas:
Os processos precisam ter um pai (PPID). O kernel, apesar de não ser um processo real, está, no entanto, criando alguns processos reais, como pelo menos o init, e está fornecendo o ID de processo 0. Dependendo do sistema operacional, ele pode ou não ser exibido como um processo na ps
saída, mas sempre é exibido como um PPID:
por exemplo, no 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]
...
no 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
...
Observe também que pid 0
(e -1
outros valores negativos) têm significados diferentes, dependendo da função que eles usam kill
, fork
e waitpid
.
Por fim, enquanto o init
processo é tradicionalmente considerado pid #1
, isso não acontece mais quando a virtualização no nível do SO é usada como zonas Solaris, pois pode haver mais de uma init
execução:
$ 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
Existem duas tarefas com IDs de processo especialmente distintos: o swapper ou sched possui o ID de processo 0 e é responsável pela paginação, como o jlliagre, como nos exemplos anteriores, e é realmente parte do kernel e não um processo normal no modo de usuário.
O ID do processo 1 geralmente é o processo de inicialização principal responsável por iniciar e desligar o sistema. Originalmente, o ID do processo 1 não era especificamente reservado para o init por nenhuma medida técnica: ele simplesmente tinha esse ID como uma conseqüência natural de ser o primeiro processo invocado pelo kernel. Os sistemas Unix mais recentes geralmente têm componentes adicionais do kernel visíveis como 'processos'; nesse caso, o PID 1 é reservado ativamente para que o processo init mantenha consistência com os sistemas mais antigos.
Em geral, 0 é frequentemente usado para significar uma 'referência nula'. Isso significava que, embora o valor 0 exista, você não pode usá-lo porque deseja que zero signifique um valor especial.
pid
0 tem um significado especial para akill(2)
chamada do sistema em que significa eu mesmo e parawaitpid(2)
onde significa pelo menos qualquer processo no meu grupo de processos . Sem mencionar quefork()
retornar0
significa que estamos na criança.