het nohup
commando voert een ander programma uit dat als argument is opgegeven en negeert alle SIGHUP
(hangup) signalen. SIGHUP
is een signaal dat naar een proces wordt verzonden wanneer de controlerende terminal wordt gesloten.
Gewoonlijk, wanneer je een programma draait via SSH, als je verbinding wegvalt of je uitlogt, wordt de sessie beëindigd, en alle processen die vanaf de terminal worden uitgevoerd zullen stoppen. Dit is waar het nohup
commando van pas komt., Het negeert alle hangup signalen, en het proces zal blijven lopen.
het gebruik van de nohup-opdracht #
de syntaxis voor de opdracht nohup
is als volgt:
nohup COMMAND
het commando accepteert geen andere opties behalve de standaard --help
en --version
.,
laten we eens kijken naar het volgende voorbeeld:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
voert het commando mycommand
uit op de voorgrond en leidt de uitvoer van het commando om naar de nohup.out
bestand. Dit bestand wordt aangemaakt in de huidige werkmap . Als de gebruiker die het commando uitvoert geen schrijfrechten heeft voor de werkmap, wordt het bestand aangemaakt in de persoonlijke map van de gebruiker.
Als u zich afmeldt of de terminal Sluit, wordt het proces niet beëindigd.,
het uitvoeren van het commando op de achtergrond #
met behulp van nohup
op de voorgrond is niet erg nuttig omdat u niet in staat zult zijn om met de shell te communiceren totdat het commando is voltooid.
om de opdracht op de achtergrond uit te voeren , voegt u het &
symbool toe aan het einde van de opdracht:
nohup mycommand &
De uitvoer bevat de shell-taak-ID (omgeven met haakjes) en proces-ID:
25177
u kunt de taak-ID gebruiken om het commando op de voorgrond met het commando fg
.,
Als u om een of andere reden het proces wilt beëindigen, gebruik dan de opdracht kill
gevolgd door de opdracht ID:
kill -9 25132
de uitvoer omleiden naar een bestand #
standaard wordt nohup
de uitvoer van de opdracht omgeleid naar de nohup.out
bestand. Als je de uitvoer naar een ander bestand wilt omleiden, gebruik dan de standaard shell omleiding.,
bijvoorbeeld, om de standaarduitvoer en standaardfout om te leiden naar de mycommand.out
u zou gebruiken:
nohup mycommand > mycommand.out 2>&1 &
om de standaarduitvoer en standaardfout om te leiden naar verschillende bestanden:
nohup mycommand > mycommand.out 2> mycommand.err &
alternatieven #
Er zijn verschillende alternatieven programma ‘ s die u kunt gebruiken om te voorkomen dat een opdracht wordt beëindigd wanneer u de terminal Sluit of de verbinding wordt verbroken.,
scherm #
scherm of GNU-scherm is een terminal multiplexer programma waarmee u een schermsessie kunt starten en een willekeurig aantal vensters (virtuele terminals) in die sessie kunt openen. Processen die in het scherm worden uitgevoerd, blijven draaien wanneer hun venster niet zichtbaar is, zelfs als de verbinding wordt verbroken.
Tmux #
Tmux is een modern alternatief voor het GNU-scherm. Met Tmux kunt u ook een sessie maken en meerdere vensters in die sessie openen. Tmux sessies zijn persistent, wat betekent dat programma ‘ s die draaien in Tmux zullen blijven draaien, zelfs als je de terminal Sluit.,
Disown #
disown
is een ingebouwde shell die een shell-taak uit het Taakbeheer van de shell verwijdert. In tegenstelling tot nohup
, kunt u disown
ook gebruiken bij draaiende processen.
conclusie #
nohup
Hiermee kunt u voorkomen dat opdrachten worden beëindigd wanneer u uitlogt of de terminal verlaat.