Respuestas:
En Linux, cada proceso tiene varias ID asociadas, que incluyen:
ID de proceso (PID)
Este es un número arbitrario que identifica el proceso. Cada proceso tiene una ID única, pero después de que el proceso finaliza y el proceso padre ha recuperado el estado de salida, la ID del proceso se libera para ser reutilizada por un nuevo proceso.
ID de proceso principal (PPID)
Este es solo el PID del proceso que inició el proceso en cuestión.
ID de grupo de proceso (PGID)
Este es solo el PID del líder del grupo de proceso. Si PID == PGID, entonces este proceso es un líder de grupo de procesos.
ID de sesión (SID)
Este es solo el PID del líder de la sesión. Si PID == SID, este proceso es un líder de sesión.
Las sesiones y los grupos de procesos son solo formas de tratar una cantidad de procesos relacionados como una unidad. Todos los miembros de un grupo de procesos siempre pertenecen a la misma sesión, pero una sesión puede tener múltiples grupos de procesos.
Normalmente, un shell será un líder de sesión, y cada canalización ejecutada por ese shell será un grupo de procesos. Esto es para que sea fácil matar a los hijos de un proyectil cuando sale. (Ver la salida (3) para los detalles sangrientos).
No creo que haya un término especial para un miembro de una sesión o grupo de procesos que no sea el líder.
Un líder de sesión es un proceso donde la identificación de sesión == identificación de proceso. Esto suena artificial, pero la identificación de la sesión es heredada por los procesos secundarios. Algunas operaciones dentro de UNIX / Linux operan en sesiones de proceso, por ejemplo, negando la identificación del proceso cuando se envía a la llamada o comando kill system. El uso más común para esto es al cerrar sesión en un shell. El sistema operativo enviará kill -HUP -$$
, lo que enviará una señal SIGHUP (bloqueo) a todos los procesos con la misma identificación de sesión que el shell. Cuando rechaza un proceso, la identificación de la sesión del proceso se cambia desde el shell, por lo que no responderá a la señal de bloqueo. Esta es una parte del proceso para convertirse en un proceso demonio.
La mayoría de los procesos llamados desde el administrador de ventanas / entorno gráfico tienen la misma identificación de sesión que uno de los programas de inicio. Esto permite que el sistema operativo realice la misma kill -HUP -$$
operación en todos los programas: como su navegador, reproductor de música, libreoffice, cliente de mensajería instantánea, etc. Estos son los procesos que no son líderes de sesión.
Pensé que sabía la respuesta a esto, pero escribí un programa en C para resolver esto.
#include <stdio.h>
#include <unistd.h>
int
main(int ac, char **av)
{
pid_t sid, mypid, pgid, gid;
mypid = getpid();
sid = getsid(0);
pgid = getpgid(0);
gid = getpgrp();
printf("PID %d\n", mypid);
printf("process group ID of session leader: %d\n", sid);
printf("process group ID: %d\n", pgid);
printf("process group ID: %d\n", gid);
if (!fork())
{
mypid = getpid();
sid = getsid(0);
pgid = getpgid(0);
gid = getpgrp();
printf("child PID %d\n", mypid);
printf("process group ID of session leader: %d\n", sid);
printf("process group ID: %d\n", pgid);
printf("process group ID: %d\n", gid);
_exit(0);
}
return 0;
}
Lo compilé, cc -g -o sid sid.c
lo ejecuté de diferentes maneras, para ver qué sucede:
./sid
nohup ./sid > sid.out
setsid ./sid
Me sorprendió un poco lo que Linux (2.6.39) devolvió. También encontré la página de manual de la sección 7, "credenciales".
Mi consejo es hacer man 7 credentials
(o el equivalente si no está en Linux), y leer la sección sobre grupo de procesos y sesión para ver si puedes resolverlo.
./sid
y nohup ./sid
, cuando se ejecuta setsid ./sid
, el ID de sesión (SID) es completamente nuevo y es el mismo que el PID de proceso ... I ' no estoy seguro de por qué nohup impidió que el tenedor (o parece), pero creo que tengo la idea general ...
ps xao pid,ppid,pgid,sid,comm
para ver estas ID.