pid0 tiene un significado especial para la kill(2)llamada al sistema donde significa yo mismo y waitpid(2)donde significa cualquier proceso en mi grupo de procesos al menos. Sin mencionar que fork()regresar 0significa que estamos en el niño.
Stéphane Chazelas
1
deberías publicar esto como respuesta
Jonathan Muller
3
Cero hace que los indicadores se configuren automáticamente en la mayoría de los registros de estado de la CPU cuando se carga en un registro, lo que permite que una rama se tome sin compararlo / probarlo específicamente. Por lo tanto, se usa mucho como un valor "centinela", es decir, un valor que significa "no válido", "fin de datos" o "caso especial" aquí. Entonces, aunque las computadoras comiencen a contar en 0, habrá muchos casos en los que 1 es el primer valor válido para la aplicación o estructura de datos en cuestión.
LawrenceC
44
Una nota al margen: las computadoras no comienzan a contar en cero. Muchos lenguajes de programación y creo que todos los lenguajes de máquina usan compensaciones donde otros (y la mayoría de los humanos) usan índices pero, no importa qué, contar es contar. Una matriz con dos elementos tiene dos elementos (cuéntelos), sin importar si su idioma se refiere a ellos por desplazamiento o por índice.
2013
Este es probablemente un caso de paradigmas subyacentes opuestos de programación: la gravitación del programador hacia valores especiales de bandera (cero, uno negativo) supera la menor atracción de una propensión a los sistemas de numeración basados en cero.
Michael
Respuestas:
29
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 pssalida, pero siempre se muestra como un PPID:
$ 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 -1otros valores negativos para esa materia) tienen diferentes significados dependiendo de qué función los use kill, forky waitpid.
Finalmente, aunque el initproceso 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 initejecución:
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.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:
en Solaris:
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 usekill
,fork
ywaitpid
.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 unainit
ejecución:fuente
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.
fuente
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.
fuente