De oorspronkelijke bedoeling van SIGHUP is om een proces te vertellen dat de seriële lijn waar de fysieke terminal aan hangt verbroken is (HUP = hangup). De standaardreactie van zo'n process is dan om zich af te sluiten, al kan in het proces zelf geprogrammeerd zijn dat het anders reageert. Tegenwoordig wordt het veelal gebruikt om aan te geven dat een terminalvenster is afgesloten.
Als je vooraf weet dat je wilt dat het proces niet op SIGHUP moet reageren kan je het starten met:
nohup commando argument...
Door Anoniem: Ik start in een shell het volgende:
mc en dan typ ik sleep 10m (kon even niets anders verzinnen)
dan heb ik in een andere shell de volgende pstree output:
|-gnome-terminal--+-bash---mc---bash---sleep
ps aux zegt:
root 16776 0.0 0.0 3888 752 pts/2 S+ 01:47 0:00 sleep 10m
als ik dan typ:
disown 16776
krijg ik:
bash: disown: 16776: no such job
Verwarrend. Werkt dit commando alleen met ctrl-z als het child process draait?
Disown is een ingebouwd bash-commando, en het heeft alleen betrekking op achtergrondjobs van een bash-sessie. Je kan dus geen jobs in een andere bash-sessie daarmee loskoppelen.
Met CTRL+Z zet je een job stil en kan je nieuwe commando's intypen. Als je wilt dat de job doordraait dan kan je het met het bg-commando weer door laten lopen, maar dan op de achtergrond (bg=background). Bijvoorbeeld:
:~$ sleep 60
^Z
[1]+ Stopped sleep 60
:~$ bg %1
[1]+ sleep 60 &
:~$ jobs
[1]+ Running sleep 60 &
:~$
Zoals je ziet gebruik je niet het PID van het proces maar refereer je aan de job met %1, %2 etc. Het nummer is wat tussen de blokhaken staat in de uitvoer hierboven. Als je het weglaat heeft de shell een opvatting over wat de 'current job' is.
Als een job eenmaal op de achtergrond loopt kan je het met disown loskoppelen van de bash-sessie:
$ disown %1
Daarna zal het geen SIGHUP meer ontvangen als je de shell afsluit.
Door LinUKz: Ik kwam hier bij toen ik een niet zo veilige browser startte en per ongeluk naar een verkeerde site surfte, de browser (parent) blijkt steeds te lekken en het kan het hele systeem crashen. Het enige wat niet crasht was een sub process dat stabiel bleef, een java applet. Alle andere vensters falen. Dus ik wil kijken of ik alleen de browser (die vreet ook veel resources) kan terminaten.
Poeh, ik denk niet dat dat gaat en ook niet dat het een goed idee is. Als een browser meerdere tabs als child-processen start dan heb je een goede kans dat de parent en die children met elkaar communiceren en van elkaar verwachten dat ze er zijn. Mocht je er al in slagen om een parent weg te krijgen en een child door te laten lopen dan grijp je in in een stelsel van processen op een manier waar de makers van de software niet op geanticipeerd zullen hebben. Ik zou er niet op rekenen dat die java applet stabiel door blijft lopen, daar kan van alles misgaan.