GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:ver y eliminar procesos repudiados

En resumen

Con & y disown no cambia el PID del proceso.
Si no lo ves en el ps -p <YOURPID> salida, ya no se está ejecutando.
Puede supervisar con un echo $? adicional después del ps (o kill ) Comando, comprobando si el programa sale con un código de salida diferente de 0 (normalmente 1 ).

Comprender tus comandos.

  • Antecedentes :cuando ejecuta el comando con el & final lo envías en segundo plano.
    Esto significa que:

    • Está presente en la lista de trabajos de su shell (en su ejemplo es el número [1] y puede referirse a él como %1; (prueba el comando jobs ).
    • Puedes ponerlo en primer plano y en segundo plano con fg y bg .
    • Es (todavía) "propiedad" por el shell (vinculado al padre):si el shell recibe un SIGHUP señal, enviará un SIGHUP señal al proceso también.

      $ 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
      
  • Desautorizar :con el comando disown elimina el trabajo de la lista de trabajos del shell, pero no cambia su 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 
    

    Tenga en cuenta el mismo PPID (el shell todavía existe).
    Ahora matamos el caparazón.

    $ 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
    

    Hay otro PPID , el 5339 , que con otra invocación de ps , ps -p 5339 , descubrirás que eres un init instancia:

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

pstree :una forma más rápida.

Puedes ver con pstree más rápidamente.

Antes del disown y matar la fiesta comandos:

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

Después del disown y matar la fiesta :

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

Nota: por supuesto, todos los PID en su caso serán diferentes...


Si no está en ps auxf , entonces no se está ejecutando. Si ejecuta kill 29144 y obtenga "No existe tal proceso", eso también significa que el proceso no se está ejecutando.


Cada proceso tiene una carpeta en el /proc sistema de archivos con su pid . Si la carpeta no existe, el proceso no se está ejecutando.

Por ejemplo

/proc/29144/

puedes ver el proceso commandline

cat /proc/29144/cmdline

salida de ejemplo:

/usr/sbin/smbd

o verifique el estado del archivo del proceso

stat /proc/29144/exe

salida de ejemplo:

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. Cómo matar un proceso zombie en Linux

  2. Cómo encontrar y matar el proceso Zombie en Linux

  3. Ejemplos de comandos kill en Linux

  4. script de linux para matar el proceso java

  5. Cómo pausar/reanudar un proceso en Linux

5 formas rápidas de matar un proceso en Linux

Cómo encontrar y matar procesos en ejecución en Linux

Cómo localizar y matar un proceso con terminal Linux

Cómo MATAR un proceso en Linux

Master Linux Kill Process usando ps, pgrep, pkill y más

Cómo matar procesos en Linux usando kill, killall y pkill