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 comandojobs
). - Puedes ponerlo en primer plano y en segundo plano con
fg
ybg
. -
Es (todavía) "propiedad" por el shell (vinculado al padre):si el shell recibe un
SIGHUP
señal, enviará unSIGHUP
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
- Está presente en la lista de trabajos de su shell (en su ejemplo es el número
-
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
, el5339
, que con otra invocación deps
,ps -p 5339
, descubrirás que eres uninit
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: -