En breve
Con &
y disown
no 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
fg
y bg
.
Es (todavía) "propiedad" del shell (vinculado al padre): si el shell recibe una SIGHUP
señal, también enviará una SIGHUP
señ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 5339
descubrirá que es una init
instancia:
$ ps -p 5339
PID TTY TIME CMD
5339 ? 00:02:20 init
pstree
: una manera más rápida.
Puedes ver con pstree
más rapidez.
Antes de disown
y matar a los comandos bash :
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)
Después de disown
y 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 ...