disown
provoque une coquille de ne pas envoyer à SIGHUP à son travail désavoué lorsque la coquille se termine, et
supprime le travail désavoué à partir du contrôle d'emploi de Shell.
Est le premier résultat du deuxième? En d'autres termes, si un processus démarré à partir d'une coquille est retiré de la commande du travail de la coque de quelque manière que ce soit, la coquille n'enverra-t-elle pas de SIGHUP au processus lorsque la coque se termine?
disown -h
conserve toujours un processus sous le contrôle d'un shell. Cela signifie-t-il que disown -h
Le processus reçoit toujours SIGHUP envoyé de la coquille, mais fixe l'action de Sighup par le processus pour être "ignorer"? Cela semble semblable à Nohup
.
$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+ Running sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+ Stopped sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit
$ ps aux | grep sleep
t 26103 0.0 0.0 14584 824 ? S 15:19 0:00 sleep 123
Faire disown -h
et Nohup
_ Travailler efficacement la même chose, si nous ignorons leur différence d'utilisation d'un terminal?
Merci.
Nohup
et disown -h
Ne sont pas exactement la même chose.
Avec disown
, un processus est supprimé de la liste des emplois dans l'interface interactive actuelle Shell. Exécution jobs
après le démarrage d'un processus d'arrière-plan et en cours d'exécution disown
ne montrera pas ce processus comme un emploi dans le Shell. Un emploi désavoué ne recevra pas de Shell HUP
quand il sort (mais voir la note à la fin).
Avec disown -h
, Le travail n'est pas supprimé de la liste des emplois, mais Shell n'enverrait un signal HUP
pour si elle est sortie (mais voir la note à la fin).
L'utilitaire Nohup
ne tient pas compte du signal HUP
et démarre l'utilitaire donné. L'utilitaire hérite du masque de signal de Nohup
et ignore donc aussi le signal HUP
. Lorsque le Shell, se termine le processus reste comme un processus enfant de Nohup
(et Nohup
est ré-apparenté à init
).
La différence est que le processus a commencé avec Ignore Nohup
HUP
quel que soit qui envoie le signal. Les processus désavoués sont tout simplement pas envoyés un signal HUP
par Shell, mais peuvent encore être envoyés le signal par exemple kill -s HUP <pid>
Et ne l'ignorer.
Notez que HUP
est envoyé uniquement aux emplois de Shell si
huponexit
est réglé, ouHUP
.Bits pertinents du manuel (je souligne) bash
:
SIGNALS
[...]
Les sorties de Shell par défaut à la réception d'un
SIGHUP
. Avant de quitter, un shell interactif réémet laSIGHUP
à tous les travaux, en cours d'exécution ou arrêté. Nous nous sommes arrêtés emplois sont envoyésSIGCONT
pour veiller à ce qu'ils reçoivent leSIGHUP
. Pour éviter Shell d'envoyer le signal à un emploi particulier, il doit être retiré de la table de l'emploi avecdisown
builtin (voirShell BUILTIN COMMANDS
Ci-dessous) ou marqué pour ne pas recevoirSIGHUP
en utilisantdisown -h
.Si le
huponexit
Option Shell a été réglée avecshopt
,bash
envoie unSIGHUP
à tous les travaux quand une connexion interactive Shell sorties.
disown [-ar] [-h] [jobspec ... | pid ... ]
Sans options, supprimer chaque
jobspec
de la table des travaux actifs. [...] Si l'option-h
Est donnée, chaquejobspec
est ne sont pas retirés de la table, mais est marqué de telle sorte queSIGHUP
n'est pas envoyé à l'emploi si le Shell reçoit unSIGHUP
. [...]
En rapport:
ils sont différents :
désigné supprime le travail de la table d'emplois active. Ensuite, continue avec le travail actuel. Avec -h le processus est [~ # ~] non [~ # ~] Sensible Sigion. Il est à la place de mourir avec la coquille qui le contient, lorsqu'il reçoit un soupirupaire.
NOHUP ignore le HUP. Ensuite, tout ce qui aurait été transmis au terminal par la fermeture de Pycs se rend à la place à un fichier Nohup.out
.
NOHUP est défini par POSIX tandis que le désavantage n'est pas.