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
fgybg. -
Es (todavía) "propiedad" por el shell (vinculado al padre):si el shell recibe un
SIGHUPseñal, enviará unSIGHUPseñ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
disownelimina 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:00Tenga 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 sleepHay otro
PPID, el5339, que con otra invocación deps,ps -p 5339, descubrirás que eres uninitinstancia:$ 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: -