No hay mucho que poner aquí en el cuerpo.
No hay mucho que poner aquí en el cuerpo.
Respuestas:
Los procesos deben tener un padre (PPID). El kernel, a pesar de no ser un proceso real, está elaborando a mano algunos procesos reales, como al menos init, y se da a sí mismo el ID de proceso 0. Dependiendo del sistema operativo, puede o no mostrarse como un proceso en la ps
salida, pero siempre se muestra como un PPID:
por ejemplo en 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]
...
en 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
...
Tenga en cuenta también que pid 0
(y -1
otros valores negativos para esa materia) tienen diferentes significados dependiendo de qué función los use kill
, fork
y waitpid
.
Finalmente, aunque el init
proceso tradicionalmente se da pid #1
, este ya no es el caso cuando la virtualización a nivel del sistema operativo se utiliza como zonas de Solaris, ya que puede haber más de una init
ejecución:
$ 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
Hay dos tareas con ID de proceso especialmente distinguidas: swapper o sched tiene ID de proceso 0 y es responsable de la paginación, como jlliagre en los ejemplos anteriores, y en realidad es parte del núcleo en lugar de un proceso normal en modo de usuario.
El ID de proceso 1 suele ser el proceso de inicio principalmente responsable de iniciar y apagar el sistema. Originalmente, el ID de proceso 1 no estaba reservado específicamente para init por ninguna medida técnica: simplemente tenía este ID como consecuencia natural de ser el primer proceso invocado por el núcleo. Los sistemas Unix más recientes suelen tener componentes de kernel adicionales visibles como 'procesos', en cuyo caso el PID 1 se reserva activamente para el proceso init para mantener la coherencia con los sistemas más antiguos.
En general, 0 se usa a menudo para significar una 'referencia nula'. Esto significaba que aunque exista el valor 0, es posible que no lo use porque desea que cero signifique un valor especial.
pid
0 tiene un significado especial para lakill(2)
llamada al sistema donde significa yo mismo ywaitpid(2)
donde significa cualquier proceso en mi grupo de procesos al menos. Sin mencionar quefork()
regresar0
significa que estamos en el niño.