Come posso uccidere solo un processo genitore?


10

Ho i seguenti processi.

ParentProcess
- ChildProcess
- ChildProcess
- ChildProcess

Come posso uccidere solo il processo genitore? Voglio che i processi dei bambini non vengano uccisi. Se provo a interrompere il processo genitore, i bambini riceveranno SIGHUP e verranno uccisi.


5
La definizione di un processo figlio è legata al suo genitore?
Brad Patton

umh, probabilmente si. È legato al suo genitore.
kcm1700

Risposte:


8

In generale, quando un processo diventa orfano (cioè il suo genitore muore) viene adottato da init.

La situazione speciale che descrivi probabilmente si applica a un processo interattivo alla chiusura del suo terminale di controllo (da Wikipedia ):

Il segnale SIGHUP viene inviato a un processo quando il suo terminale di controllo è chiuso. È stato originariamente progettato per notificare il processo di caduta di una linea seriale. Nei sistemi moderni, questo segnale di solito significa che il controllo di pseudo o terminale virtuale è stato chiuso.

Per evitare ciò, i processi figlio dovrebbero bloccare SIGHUP, quindi nella maggior parte dei casi è necessaria la cooperazione dal processo padre.

Se il processo genitore è una shell ( bash, cshe simili) e si desidera che i comandi si eseguono di non terminare quando finiture bash, è possibile far precedere ogni comando con nohup(da info coreutils "nohup invocation"):

'nohup' esegue il dato COMANDO con segnali di blocco ignorati, in modo che il comando possa continuare a essere eseguito in background dopo la disconnessione.

In questo esempio:

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

findnon verrà ucciso quando la shell termina e chiude il terminale di controllo /dev/ttys000.

Se uno script di shell deve bloccare SIGHUP, usa il comando incorporato trap, come spiegato qui per bash.


1
Ho già aperto il processo senza nohup, qualche suggerimento?
kcm1700

Per quanto ne so non puoi fare molto. Una volta eseguiti i processi, non è possibile modificare il modo in cui reagiscono ai segnali.
Jaume

1
Come posso mettere un processo già in esecuzione sotto nohup? stackoverflow.com/questions/625409/...
PeterVermont
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.