GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux:Disowned-Prozess anzeigen und beenden

In Kürze

Mit & und disown Sie ändern die PID des Prozesses nicht.
Wenn Sie es nicht in ps -p <YOURPID> sehen Ausgang, es läuft nicht mehr.
Sie können überprüfen es mit einem zusätzlichen echo $? nach ps (oder kill ) Befehl, um zu prüfen, ob das Programm mit einem anderen Exit-Code als 0 beendet wird (normalerweise 1 ).

Deine Befehle verstehen.

  • Hintergrund :wenn Sie den Befehl mit dem abschließenden & starten Sie senden es im Hintergrund.
    Das bedeutet:

    • Es ist in der Jobliste Ihrer Shell vorhanden (in Ihrem Beispiel ist dies die Nummer [1] und Sie können darauf als %1 verweisen; (probieren Sie den Befehl jobs ).
    • Sie können es mit fg in den Vordergrund und in den Hintergrund bringen und bg .
    • Es ist (noch) "im Besitz" durch die (mit der übergeordneten) Shell:wenn die Shell einen SIGHUP empfängt signalisiert, wird ein SIGHUP gesendet Signal an den Prozess.

      $ 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
      
  • Ablehnen :mit dem Befehl disown Sie entfernen den Job aus der Jobliste der Shell, ändern aber nicht seine 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 
    

    Beachten Sie dieselbe PPID (die Shell existiert noch).
    Jetzt töten wir die Schale.

    $ 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
    

    Es gibt noch einen PPID , die 5339 , das mit einem weiteren Aufruf von ps , ps -p 5339 , werden Sie feststellen, dass es sich um eine init handelt Beispiel:

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

pstree :ein schneller Weg.

Sie können mit pstree sehen schneller.

Vor dem disown und kill the bash Befehle:

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

Nach dem disown und kill the bash :

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

Hinweis: natürlich werden alle PIDs in Ihrem Fall anders sein ...


Wenn es nicht in ps auxf ist , dann läuft es nicht. Wenn Sie kill 29144 ausführen und erhalten "No such process", das bedeutet auch, dass der Prozess nicht läuft.


Jeder Prozess hat einen Ordner im /proc Dateisystem mit seinem pid . Wenn der Ordner nicht existiert, wird der Prozess nicht ausgeführt.

Zum Beispiel

/proc/29144/

Sie können den Prozess commandline anzeigen

cat /proc/29144/cmdline

Beispielausgabe:

/usr/sbin/smbd

oder überprüfen Sie den Status der Prozessdatei

stat /proc/29144/exe

Beispielausgabe:

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. So beenden Sie einen Zombie-Prozess unter Linux

  2. So finden und töten Sie den Zombie-Prozess in Linux

  3. Linux – Wann sollte ich keinen -9 A-Prozess beenden?

  4. Wie beendet man einen Prozess unter Linux mit dem Befehl?

  5. kill-Befehlsbeispiele in Linux

5 schnelle Möglichkeiten, einen Prozess in Linux zu beenden

So finden und beenden Sie laufende Prozesse in Linux

So finden und beenden Sie einen Prozess mit einem Linux-Terminal

Wie man einen Prozess unter Linux beendet

Meistern Sie den Linux-Kill-Prozess mit ps, pgrep, pkill und mehr

So beenden Sie Prozesse in Linux mit kill, killall und pkill