Que fait kill 0 en fait?


10

Dans le man page, il est écrit:

          0      All processes in the current process group are signaled

Et j'ai essayé comme ça:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

Si je comprends bien, kill 0va tuer tous les processus dans le processus actuel, qui comprend pid15247. Cependant, il n'a rien fait dans cet exemple. Quelqu'un at-il des idées sur la façon de l'utiliser?


Quel shell utilisez-vous?
FatalError

@FatalError J'utilise Bash
Firegun

Réponses:


4

Je n'ai pas trouvé de note sur le kill 0comportement de ma page de manuel kill (debian).

Mais j'ai deux commentaires:

(1) "Groupe de processus" n'est peut-être pas ce que vous attendez. Vous pouvez afficher l'ID de groupe de processus (PGID) avec ps -o "%p %P %r %c %a":

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

Ainsi, manavec l'outil de pageur d'affichage ( less) est dans le même groupe de processus, mais c'est différent de celui du shell (zsh dans mon cas).

(2) Il existe probablement deux killcommandes différentes . Un intégré dans bash(voir bash (1), Section "SHELL BUILTIN COMMANDS") et l'externe /bin/kill. Ces deux peuvent se comporter différemment! Vous pouvez indiquer explicitement celui que vous souhaitez exécuter en tapant builtin killou command killau lieu de kill. La commande externe , vous pouvez également exécuter en spécifiant le chemin: /bin/kill.


1
PPIDest l' ID de processus parent , qui est souvent, mais pas nécessairement, l'ID de groupe de processus. La colonne correcte est PGID, qui n'apparaît pas dans la pssortie par défaut ; vous devez utiliser l' -ooption pour construire un format personnalisé qui l'inclut.
chepner

@chepner: Vous avez absolument raison, merci! J'ai été confus par ma page de manuel ps (1) de Cygwin, qui dit: "-l, --long: affiche les processus uids, ppids, pgids, winpids". Honte à moi, j'ai modifié ma réponse en conséquence. Cependant, ma déclaration (seul l'homme + pager a le même PGID) est correcte maintenant, comme prévu. (Avant même que cette phrase ne soit mauvaise :-()
mpy

1

Pour arrêter tous vos processus et vous déconnecter, entrez:

kill -kill 0

Cela envoie le signal 9, le signal SIGKILL, à tous les processus ayant un ID de groupe de processus égal à l'ID de groupe de processus de l'expéditeur. Parce que le shell ne peut pas ignorer le signal SIGKILL, cela arrête également le shell de connexion et vous déconnecte

Il s'agit du manuel AIX d'IBM, mais peut-être que le concept s'applique.

Cette fonctionnalité n'existe pas sous Linux "kill" (comme je peux le voir); mais c'est comme ça que "tuer" se comporte:

Tuer 0 ne tue pas le pid 0. Au lieu de cela, c'est une option dans kill pour tuer tous les processus du groupe actuel . Avec votre commande, vous tuez tout dans l'ID de groupe de processus (GID) du shell qui a émis la commande kill.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.