Linux: Anzeigen und Beenden eines nicht genehmigten Prozesses

3

Ich habe ein Programm unter Linux mit &und gestartet disown.
Ich möchte sehen, ob es noch läuft und es möglicherweise töten.

Ich habe den Prozess mit folgenden Befehlen gestartet:

(env)bash-4.2$ python manage.py update_rollups &

[1] 29144

(env)bash-4.2$ disown

Ich kann es nicht mehr finden ps auxund auch nicht aufgrund der PID töten 29144.
Ich möchte wissen, ob der Prozess noch läuft (unter init?).

Ich hoffe du kannst helfen!

user715198
quelle
Willkommen bei Super User. Geben Sie Feedback zu den Beantworter, denken Sie daran , dass Sie bearbeiten Ihre eigene Frage, upvote, downvote die Antworten und wählen Sie eine von ihnen , wenn Sie denken , dass es Ihre Frage löst.
Hastur

Antworten:

4

In Kürze

Mit &und disownändern Sie die PID [ 1 ] des Prozesses nicht.
Wenn Sie es in der ps -p <YOURPID>Ausgabe nicht sehen , wird es nicht mehr ausgeführt.
Sie können über überprüfen es mit einer zusätzlichen echo $? [ 2 ] nach dem ps(oder kill) Befehl, zu überprüfen , ob das Programm beendet mit einem Exit - Code unterscheidet sich von 0( in der Regel 1).

Verstehen Sie Ihre Befehle.

  • Hintergrund : Wenn Sie den Befehl mit dem Finale starten &, senden Sie ihn im Hintergrund.
    Das bedeutet, dass:

    • Es ist in der Jobliste Ihrer Shell vorhanden (in Ihrem Beispiel ist es die Nummer, [1]und Sie können sich darauf beziehen als %1; (versuchen Sie den Befehl jobs).
    • Sie können es mit fgund in den Vordergrund und in den Hintergrund bringen bg.
    • Es ist (noch) „Besitz“ von der ( in Verbindung mit der übergeordneten) Schale: Wenn die Schale ein empfängt SIGHUPSignal, es wird ein senden SIGHUPzu 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
      
  • Disown : Mit dem Befehl disownentfernen Sie den Job aus der Jobliste der Shell, aber Sie ändern die PID nicht.

    $ 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 die gleiche PPID (die Shell ist noch vorhanden).
    Jetzt töten wir die Muschel.

    $ 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 eine andere PPID, die Sie 5339bei einem erneuten Aufruf von ps, ps -p 5339als initInstanz entdecken werden :

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

pstree: ein schneller Weg.

Sie können mit pstreeschneller sehen.

Vor dem disownund töte die Bash- Befehle:

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

Nach dem disownund töte die Bash :

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

Hinweis: Natürlich sind alle PIDs in Ihrem Fall unterschiedlich ...

Hastur
quelle
2

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

Grawity
quelle
Hmm, ich sehe den Prozess mit ps auxf nicht, oder könnte er in einem von diesen versteckt sein? WEB0117 32409 0,3 0,2 583004 39360? Sl 12:49 0:01 _ WEB0117 -k start (WEB0117 ist der Benutzer, als den ich
arbeite
2

Jeder Prozess hat einen Ordner im /procDateisystem pid. Wenn der Ordner nicht vorhanden ist, wird der Prozess nicht ausgeführt.

Zum Beispiel

/proc/29144/

Sie können den Prozess anzeigen commandline

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: -
Michael D.
quelle