¿Cómo puedo matar solo un proceso padre?

10

Tengo los siguientes procesos.

Proceso para padres
- Proceso infantil
- Proceso infantil
- Proceso infantil

¿Cómo puedo matar solo el proceso padre? Quiero que los procesos infantiles no sean asesinados. Si trato de matar el proceso padre, los niños recibirán SIGHUP y serán asesinados.

kcm1700
fuente
55
¿Es la definición de un proceso hijo que está vinculado a su padre?
Brad Patton
umh, probablemente sí. Está atado a su padre.
kcm1700

Respuestas:

8

En términos generales, cuando un proceso se vuelve huérfano (es decir, su padre muere), es adoptado por init.

La situación especial que describe probablemente se aplica a un proceso interactivo cuando se cierra su terminal de control (de Wikipedia ):

La señal SIGHUP se envía a un proceso cuando su terminal de control está cerrado. Originalmente fue diseñado para notificar el proceso de una caída de línea en serie. En los sistemas modernos, esta señal generalmente significa que se ha cerrado el pseudo o terminal virtual de control.

Para evitar esto, los procesos secundarios deben bloquear SIGHUP, por lo que en la mayoría de los casos necesita la cooperación del proceso primario.

Si el proceso padre es un shell ( bash, cshy similares) y desea que los comandos se ejecutan no termina cuando termina de bash, se puede prefijar con cualquier comando nohup(de info coreutils "nohup invocation"):

'nohup' ejecuta el comando dado con las señales de bloqueo ignoradas, para que el comando pueda continuar ejecutándose en segundo plano después de cerrar sesión.

En este ejemplo:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

findno se matará cuando el shell termine y cierre el terminal de control /dev/ttys000.

Si un script de shell debe bloquear SIGHUP, use el incorporado trap, como se explica aquí para bash.

jaume
fuente
1
Ya he abierto el proceso sin nohup, ¿alguna sugerencia?
kcm1700
Que yo sepa, no puedes hacer mucho. Una vez que se ejecutan los procesos, no puede cambiar la forma en que reaccionan a las señales.
jaume
1
¿Cómo pongo un proceso que ya se está ejecutando en nohup? stackoverflow.com/questions/625409/…
PeterVermont