Je continue donc à lire partout que cette commande doit terminer tous les processus enfants du processus parent :
kill -- -$$
L'utilisation d'un ID négatif avec la commande kill fait référence à un PGID et d'après les exemples que j'ai vus, il semble que le PGID des processus enfants devrait être le PID du parent, mais ce n'est pas le cas sur mon système.
Sur mon système, le PGID de l'enfant est le même que le PGID du script parent qui s'avère être bash.
Que se passe t-il ici? Les exemples étaient-ils erronés ou mon système est-il configuré différemment ?
Ce que je dois faire, c'est mettre fin aux processus enfants sans mettre fin au parent afin de ne pas envoyer de signal d'arrêt au PGID dans lequel se trouve le parent.
Réponse acceptée :
Lorsqu'un processus est forké, il hérite son PGID de son parent. Le PGID change lorsqu'un processus devient un chef de groupe de processus , son PGID est copié à partir de son PID. Dès lors, les nouveaux processus enfants qu'il génère et leurs descendants héritent de ce PGID (à moins qu'ils ne démarrent eux-mêmes de nouveaux groupes de processus).
Dans un shell avec contrôle des tâches, comme la plupart des shells interactifs, chaque tâche est placée dans son propre groupe de processus. Si vous exécutez un script shell, le processus shell exécutant le script sera le chef de groupe et le PGID sera égal à son PID.
Dans un shell sans contrôle des tâches, comme la plupart des shells utilisés pour exécuter des scripts, les commandes sont exécutées dans le groupe de processus du shell.
La syntaxe kill -- -N
tue tous les processus du groupe avec PGID =N. Vous ne pouvez pas l'utiliser avec un PID arbitraire, uniquement le PID d'un chef de groupe de processus, car c'est le PGID. C'est essentiellement la façon dont le shell
kill %jobid
la syntaxe fonctionne — elle traduit en interne %jobid
au PGID du travail et envoie le signal à ce PGID.
Il n'y a pas de moyen simple d'exécuter un script dans son propre groupe de processus à partir d'un autre script shell. Voir Comment définir le groupe de processus d'un script shell pour quelques suggestions, cependant.
Connexe :Déplacez tous les fichiers de plusieurs dossiers dans le répertoire parent avec l'invite de commande ?