GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué el Pgid de los procesos secundarios no es el Pid del padre?

Así que sigo leyendo en todas partes que este comando debería terminar todos los procesos secundarios del proceso principal:

kill -- -$$

El uso de una ID negativa con el comando kill hace referencia a un PGID y, según los ejemplos que he visto, parece que el PGID de los procesos secundarios debería ser el PID del padre, pero no es el caso en mi sistema.

En mi sistema, el PGID del niño es el mismo que el PGID del script principal, que resulta ser bash.

¿Que está pasando aqui? ¿Estaban mal los ejemplos o mi sistema está configurado de manera diferente?

Lo que debo lograr es finalizar los procesos secundarios sin finalizar el padre, por lo que no quiero enviar una señal de finalización al PGID en el que se encuentra el padre.

Respuesta aceptada:

Cuando se bifurca un proceso, hereda su PGID de su padre. El PGID cambia cuando un proceso se convierte en un líder de grupo de procesos , luego su PGID se copia de su PID. A partir de ese momento, los nuevos procesos secundarios que genera, y sus descendientes, heredan ese PGID (a menos que inicien nuevos grupos de procesos propios).

En un shell con control de trabajos, como la mayoría de los shells interactivos, cada trabajo se coloca en su propio grupo de procesos. Si ejecuta un script de shell, el proceso de shell que ejecuta el script será el líder del grupo y el PGID será igual a su PID.

En un shell sin control de trabajo, como la mayoría de los shells que se utilizan para ejecutar scripts, los comandos se ejecutan en el grupo de procesos del shell.

La sintaxis kill -- -N mata todos los procesos en el grupo con PGID =N. No puede usarlo con un PID arbitrario, solo el PID de un líder de grupo de procesos, ya que ese es el PGID. Así es esencialmente cómo funciona el caparazón

kill %jobid

la sintaxis funciona:traduce internamente %jobid al PGID del trabajo y envía la señal a ese PGID.

No existe una forma sencilla de ejecutar un script en su propio grupo de procesos desde otro script de shell. Sin embargo, consulte Cómo configurar el grupo de procesos de un script de shell para obtener algunas sugerencias.

Relacionado:¿Mover archivos de varias carpetas al directorio principal con el símbolo del sistema?
Linux
  1. ¿Por qué Cd no es un programa?

  2. ¿Nuevo proceso principal cuando muere el proceso principal?

  3. ¿Por qué Signint no se propaga al proceso secundario cuando se envía a su proceso principal?

  4. ¿Por qué se bifurca el mecanismo de creación de procesos predeterminado?

  5. ¿Por qué el documento principal Shell Here no funciona para el subcomando en Dash pero Bash funciona?

¿Por qué no instalar paquetes de software desde Internet?

Construcción de contenedores a mano:el espacio de nombres PID

Cómo enviar procesos a segundo plano en Linux

¿Por qué el proceso secundario sigue vivo después de que el proceso principal se eliminó en Linux?

¿Cómo obtener la identificación del proceso para eliminar un proceso nohup?

Bash:¿Por qué la secuencia de comandos principal no termina en SIGINT cuando la secuencia de comandos secundaria atrapa a SIGINT?