In Bash, il disown
comando emesso da solo rimuoverà i processi in background (tramite bg
o &
) dalla tabella dei lavori attivi e li contrassegnerà per non ricevere un SIGHUP al logout.
Puoi anche passare uno o più lavori da respingere, come disown 1 3
. Il disown -h
flag è utile se si desidera mantenere i lavori nella tabella, ma non ancora SIGHUP al logout.
È possibile visualizzare la tabella dei lavori immettendo il jobs
comando. Dopo uno sfondo di successo, mostrerà [1]+ command &
. Dopo aver rinnegato un lavoro, non dovrebbe più essere visualizzato nella tabella dei lavori e non essere più eliminato al logout. È ancora possibile visualizzare il processo di via ps ux
, top
e altre utilità di processo-osservazione.
Dopo che un lavoro è stato rinnegato, è possibile attendere che termini in modo naturale o inviare un segnale kill
al PID per interromperlo.
Poiché Bash sta semplicemente rimuovendo il lavoro dall'elenco dei lavori in esecuzione da terminare e il file viene gestito dallo stdout del terminale e lo stderr è ancora aperto, continuerai a ricevere l'output dal lavoro fino alla chiusura del dispositivo terminale (quando esci) .
Esempi:
# we start a command in the background
$ cat /dev/urandom > test &
[1] 18533
# we see our command is still running
$ jobs
[1]+ Running cat /dev/urandom > test &
# we disown the backgrounded job
$ disown 1
# notice it is no longer in the job table
$ jobs
Io di solito uso solo disown
se si esegue un comando potenzialmente di lunga durata come un rsync
o cp
e poi decidere ho bisogno di uscire senza terminare esso. Se sai che eseguirai un comando e ti disconnetterai, puoi catturare l'output tee
eseguendo il piping o inserendolo in un file, eseguendolo nohup
o eseguendolo screen
(che ti consente di riprendere la proprietà del comando / terminare in seguito ).
Esempi:
# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log
# capture stdout and stderr to the same log, and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log
# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null