Linux: vea y elimine el proceso de propiedad


4

He comenzado un programa en Linux usando &y disown.
Deseo ver si todavía se está ejecutando y posiblemente matarlo.

Comencé el proceso con comandos como estos:

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

[1] 29144

(env)bash-4.2$ disown

Ya no puedo encontrarlo ps auxni matarlo en función del pid 29144.
Quiero saber si el proceso aún se está ejecutando ( init¿ bajo ?).

¡Espero que puedas ayudar!


Bienvenido a Super User. Dé retroalimentación a los que responden, recuerde que puede editar su propia pregunta, votar a favor, rechazar las respuestas y elegir una de ellas si cree que resuelve su pregunta.
Hastur

Respuestas:


4

En breve

Con &y disownno cambia el PID [ 1 ] del proceso.
Si no lo ve en la ps -p <YOURPID>salida, ya no se está ejecutando.
Puede verificarlo con un echo $? [ 2 ] adicional después del comando ps(o kill), verificando si el programa sale con un código de salida diferente de 0(típicamente 1).

Comprender tus comandos.

  • Fondo : cuando ejecuta el comando con la final, &lo envía en segundo plano.
    Esto significa que:

    • Está presente en la lista de trabajos de su shell (en su ejemplo, está el número [1]y puede referirse a él como %1; (pruebe el comando jobs).
    • Puede ponerlo en primer plano y en segundo plano con fgy bg.
    • Es (todavía) "propiedad" del shell (vinculado al padre): si el shell recibe una SIGHUPseñal, también enviará una SIGHUPseñal al proceso.

      $ 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
  • Desconocido : 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 al 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 otra PPID, la 5339, que con otra invocación de ps, ps -p 5339descubrirá que es una initinstancia:

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

pstree: una manera más rápida.

Puedes ver con pstreemás rapidez.

Antes de disowny matar a los comandos bash :

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

Después de disowny matar a 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 ...


3

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


Hmm, no veo el proceso con ps auxf, ¿o podría estar oculto en uno de estos? WEB0117 32409 0.3 0.2 583004 39360? Sl 12:49 0:01 _ WEB0117 -k start (WEB0117 es el usuario al que estoy ejecutando)
user715198

2

Cada proceso tiene una carpeta en el /procsistema de archivos con ella 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 de 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: -
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.