GNU/Linux >> Tutoriels Linux >  >> Linux

Linux :afficher et supprimer le processus désavoué

En bref

Avec & et disown vous ne modifiez pas le PID du processus.
Si vous ne le voyez pas dans le ps -p <YOURPID> sortie, il ne tourne plus.
Vous pouvez survérifier avec un echo $? supplémentaire après le ps (ou kill ) commande, vérifiant si le programme se termine avec un code de sortie différent de 0 (généralement 1 ).

Comprendre vos commandes.

  • Contexte :lorsque vous lancez la commande avec le & final vous l'envoyez en arrière-plan.
    Cela signifie que :

    • Il est présent dans la liste des jobs de votre shell (dans votre exemple c'est le numéro [1] et vous pouvez vous y référer en tant que %1; (essayez la commande jobs ).
    • Vous pouvez l'amener au premier plan et en arrière-plan avec fg et bg .
    • Il est (toujours) "possédé" par le shell (lié au parent) :si le shell reçoit un SIGHUP signal, il enverra un SIGHUP signal au processus aussi.

      $ sleep 1h &
      [1] 10795
      $ jobs
      [1]+  running           sleep 1h & 
      $ ps -l -p 10795       
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
      
  • Renier :avec la commande disown vous supprimez le travail de la liste des travaux du shell, mais vous ne modifiez pas son PID.

    $ disown
    $ jobs
          # <---- No jobs
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  8380  0  80   0 -  3107 hrtime pts/57   00:00:00 
    

    Notez le même PPID (le shell existe toujours).
    Maintenant, nous tuons la coquille.

    $ kill 8380   # Here we kill the shell 
    $ ps -l -p 10795
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 10795  5339  0  80   0 -  3107 hrtime pts/57   00:00:00 sleep
    

    Il y a un autre PPID , le 5339 , cela avec une autre invocation de ps , ps -p 5339 , vous découvrirez que vous êtes un init instance :

    $ ps -p 5339
    PID TTY          TIME CMD
    5339 ?        00:02:20 init
    

pstree  :un moyen plus rapide.

Vous pouvez voir avec pstree plus rapidement.

Avant le disown et tuez le bash commandes :

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)

Après le disown et tuez le bash :

$ pstree -s -p 10795 
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)

Remarque : bien sûr tous les PID dans votre cas seront différents...


Si ce n'est pas dans ps auxf , alors il ne fonctionne pas. Si vous exécutez kill 29144 et obtenez "Aucun processus de ce type", cela signifie également que le processus n'est pas en cours d'exécution.


Chaque processus a un dossier dans le /proc système de fichiers avec son pid . Si le dossier n'existe pas, le processus n'est pas en cours d'exécution.

Par exemple

/proc/29144/

vous pouvez voir le processus commandline

cat /proc/29144/cmdline

exemple de sortie :

/usr/sbin/smbd

ou vérifier l'état du fichier de processus

stat /proc/29144/exe

exemple de sortie :

File: /proc/29144/exe -> /usr/sbin/smbd
  Size: 0               Blocks: 0          IO Block: 1024   symbolic link
Device: 3h/3d   Inode: 78497       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-07 12:18:01.719011505 +0200
Modify: 2017-04-07 12:18:01.369010535 +0200
Change: 2017-04-07 12:18:01.369010535 +0200
 Birth: -

Linux
  1. Comment tuer un processus zombie sous Linux

  2. Comment trouver et tuer le processus Zombie sous Linux

  3. Linux - Quand ne devrais-je pas tuer -9 Un processus ?

  4. script linux pour tuer le processus java

  5. Comment mettre en pause/reprendre un processus sous Linux

5 façons rapides de tuer un processus sous Linux

Comment trouver et tuer les processus en cours d'exécution sous Linux

Comment localiser et tuer un processus avec un terminal Linux

Comment tuer un processus sous Linux

Maîtriser le processus Linux Kill à l'aide de ps, pgrep, pkill et plus

Comment tuer les processus sous Linux en utilisant kill, killall et pkill