Dans Bash, la disown
commande émise d'elle-même supprimera les processus en arrière-plan (via bg
ou &
) de la table de travaux active et les marquera pour ne pas recevoir de SIGHUP à la déconnexion.
Vous pouvez également passer un ou plusieurs travaux à désavouer, comme disown 1 3
. L' disown -h
indicateur est utile si vous souhaitez conserver les travaux dans la table, mais toujours pas SIGHUP à la déconnexion.
Vous pouvez afficher la table des travaux en exécutant la jobs
commande. Après un fond réussi, cela se verra [1]+ command &
. Après avoir désavoué un travail, il ne devrait plus s'afficher dans la table des travaux et ne plus être supprimé à la déconnexion. Vous pouvez toujours le processus par l' intermédiaire ps ux
, top
et d' autres utilitaires de visualisation processus.
Une fois qu'une tâche a été supprimée, vous pouvez attendre qu'elle se termine naturellement ou envoyer un signal via kill
le PID pour l'arrêter.
Parce que Bash supprime simplement le travail de la liste des travaux en cours pour terminer et que les poignées de fichier vers la sortie standard et la sortie de votre terminal sont toujours ouvertes, vous continuerez à recevoir la sortie du travail jusqu'à ce que votre terminal soit fermé (lorsque vous vous déconnectez) .
Exemples:
# 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
Je n'utilise généralement que disown
si j'exécute une commande potentiellement longue comme un rsync
ou cp
et décide ensuite que je dois me déconnecter sans y mettre fin. Si vous savez que vous allez exécuter une commande et vous déconnecter, vous pouvez capturer la sortie en canalisant ou en l' tee
intégrant dans un fichier, en l'exécutant avec nohup
ou en l'exécutant screen
(ce qui vous permet de reprendre la propriété de la commande / de terminer ensuite ).
Exemples:
# 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