Quindi continuo a leggere ovunque che questo comando dovrebbe terminare tutti i processi figlio del processo padre:
kill -- -$$
L'utilizzo di un ID negativo con il comando kill fa riferimento a un PGID e dagli esempi che ho visto sembra che il PGID dei processi figlio dovrebbe essere il PID del genitore ma non è il caso sul mio sistema.
Sul mio sistema il PGID del figlio è lo stesso del PGID dello script genitore che risulta essere bash.
Cosa sta succedendo qui? Gli esempi erano sbagliati o il mio sistema è configurato in modo diverso?
Quello che devo ottenere è terminare i processi figlio senza terminare il genitore, quindi non voglio inviare un segnale di kill al PGID in cui si trova il genitore.
Risposta accettata:
Quando un processo viene biforcato, eredita il suo PGID dal genitore. Il PGID cambia quando un processo diventa un leader del gruppo di processi , il suo PGID viene copiato dal suo PID. Da quel momento in poi, il nuovo figlio elabora che si genera e i loro discendenti ereditano quel PGID (a meno che non inizino nuovi gruppi di processi propri).
In una shell con controllo del lavoro, come la maggior parte delle shell interattive, ogni lavoro viene inserito nel proprio gruppo di processi. Se esegui uno script di shell, il processo di shell che esegue lo script sarà il leader del gruppo e il PGID sarà uguale al suo PID.
In una shell senza controllo del lavoro, come la maggior parte delle shell utilizzate per eseguire gli script, i comandi vengono eseguiti nel gruppo di processi della shell.
La sintassi kill -- -N
uccide tutti i processi nel gruppo con PGID =N. Non puoi usarlo con un PID arbitrario, solo il PID di un leader del gruppo di processi, poiché questo è il PGID. Questo è essenzialmente come funziona la shell
kill %jobid
la sintassi funziona — traduce internamente %jobid
al PGID del lavoro e invia il segnale a quel PGID.
Non esiste un modo semplice per eseguire uno script nel proprio gruppo di processi da un altro script di shell. Tuttavia, vedere Come impostare il gruppo di processi di uno script di shell per alcuni suggerimenti.
Correlati:spostare i file da più cartelle nella directory principale con il prompt dei comandi?