GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:visualizza e termina il processo rinnegato

In breve

Con & e disown non si modifica il PID del processo.
Se non lo vedi nel ps -p <YOURPID> uscita, non è più in esecuzione.
Puoi controllare troppo con un ulteriore echo $? dopo il ps (o kill ), controllando se il programma esce con un codice di uscita diverso da 0 (tipicamente 1 ).

Capire i tuoi comandi.

  • Sfondo :quando lanci il comando con il & finale lo mandi in background.
    Ciò significa che:

    • È presente nell'elenco dei lavori della tua shell (nel tuo esempio è il numero [1] e puoi farvi riferimento come %1; (prova il comando jobs ).
    • Puoi portarlo in primo piano e sullo sfondo con fg e bg .
    • È (ancora) "di proprietà" dalla shell (collegata alla madre):se la shell riceve un SIGHUP segnale, invierà un SIGHUP segnale anche al processo.

      $ 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
      
  • Rifiuto :con il comando disown rimuovi il lavoro dall'elenco dei lavori della shell, ma non cambi il suo 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 
    

    Nota lo stesso PPID (la shell esiste ancora).
    Ora uccidiamo il guscio.

    $ 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
    

    C'è un altro PPID , il 5339 , che con un'altra invocazione di ps , ps -p 5339 , scoprirai di essere un init istanza:

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

pstree :un modo più rapido.

Puoi vedere con pstree più rapidamente.

Prima del disown e uccidi il bash comandi:

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

Dopo il disown e uccidi il bash :

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

Nota: ovviamente tutti i PID nel tuo caso saranno diversi...


Se non è in ps auxf , quindi non è in esecuzione. Se esegui kill 29144 e ottieni "No such process", che significa anche che il processo non è in esecuzione.


Ogni processo ha una cartella nel /proc filesystem con pid . Se la cartella non esiste, il processo non è in esecuzione.

Ad esempio

/proc/29144/

puoi visualizzare il processo commandline

cat /proc/29144/cmdline

output di esempio:

/usr/sbin/smbd

o controllare lo stato del file di processo

stat /proc/29144/exe

output di esempio:

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. Come uccidere un processo zombie su Linux

  2. Come trovare e uccidere il processo Zombie in Linux

  3. Linux – Quando non dovrei uccidere -9 Un processo?

  4. Come uccidere un processo su Linux usando il comando?

  5. Come mettere in pausa/riprendere un processo in Linux

5 modi rapidi per uccidere un processo in Linux

Come trovare e uccidere i processi in esecuzione in Linux

Come individuare e terminare un processo con il terminale Linux

Come KILL un processo su Linux

Padroneggia il processo di uccisione di Linux utilizzando ps, pgrep, pkill e altro

Come uccidere i processi in Linux usando kill, killall e pkill