nohup-commando: gebruik, nohup.out en blijven draaien nadat je de terminal sluit

TestomgevingRHEL-familieAlmaLinux 9.8coreutils 8.32root-accountDebian 12 · coreutils 9.1 gewoon accountGecontroleerd op 2026-11-05
Blijft draaien, ook als de terminal sluit

Wil je dat een taak blijft draaien als je de terminal sluit of de SSH-verbinding wegvalt, start hem dan met het nohup-commando. nohup voert de opdracht uit terwijl het verbrekingssignaal (SIGHUP), dat binnenkomt als een terminal sluit, wordt genegeerd. Toen op een AlmaLinux 9-server een sleep met nohup en een sleep zonder nohup samen werden gestart en de terminal werd gesloten, bleef alleen de sleep met nohup draaien.

De uitvoer hieronder komt van een AlmaLinux 9.8-server (root-account) en een Debian 12-server (gewoon account). In plaats van een lang lopende taak werd sleep gestart, en bij het stoppen werd alleen de PID opgegeven die bij het starten terugkwam. Tijden staan in UTC.

1️⃣ Zo gebruik je het nohup-commando

  • ↪️ De & aan het eind en wat er gebeurt als je de terminal sluit

nohup zet je vóór de opdracht die je wilt uitvoeren, en met de & aan het eind van de opdracht kies je voor uitvoering op de achtergrond. Volgens de officiële GNU-handleiding stuurt nohup zelf de opdracht niet naar de achtergrond, dus zonder de & komt de prompt pas terug als de opdracht klaar is.

nohup sleep 300 &
[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'

[1] is het taaknummer en 3431609 de PID van het gestarte proces. De melding die volgde, zegt dat er geen toetsenbordinvoer wordt gelezen en dat de uitvoer aan het bestand nohup.out wordt toegevoegd.

De PID van de taak die je net hebt gestart, staat in $!. Controleer hem direct na het starten met [echo $!] en noteer hem; dat nummer gebruik je dan om de status te bekijken of de taak te stoppen.

echo $!
3431609

Als een terminal sluit, krijgt de shell het verbrekingssignaal en stuurt die hetzelfde signaal naar de taken die hij heeft gestart (volgens de officiële Bash-handleiding). Om dat te controleren werden in een nieuwe terminal [nohup sleep 300 &] en, zonder nohup, [sleep 301 &] samen gestart.

sleep 301 &
[2] 3432892
jobs -l
[1]- 3432883 Running                 nohup sleep 300 &
[2]+ 3432892 Running                 sleep 301 &

Terwijl beide taken op Running stonden, werd het terminalvenster gesloten en werden de twee PID's vanuit een andere shell met ps gecontroleerd.

ps -p 3432883,3432892 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3432883 S          00:05 sleep 300

Alleen sleep 300, gestart met nohup, bleef over; sleep 301, gestart zonder nohup, stopte toen de terminal sloot.

Een proces dat met nohup is gestart, is als een telefoon met Niet storen aan.

nohup is een opdracht uit het pakket coreutils. De geïnstalleerde versie zie je op de eerste regel van --version. De AlmaLinux 9.8-server had 8.32, de Debian 12-server 9.1.

nohup --version | head -1
nohup (GNU coreutils) 8.32
nohup --version | head -1
nohup (GNU coreutils) 9.1

2️⃣ nohup.out en uitvoer omleiden

  • ↪️ Logbestand opgeven en /dev/null

Geef je niet op waar de uitvoer heen gaat, dan voegt nohup de uitvoer van de opdracht toe aan nohup.out in de huidige map. Het net aangemaakte nohup.out was 0 bytes en had de rechten -rw-------: lezen en schrijven alleen voor de gebruiker die het aanmaakte.

ls -l nohup.out
-rw------- 1 root root 0 Oct 28 23:04 nohup.out

De officiële GNU-handleiding legt uit dat nohup nohup.out zo aanmaakt dat alleen de gebruiker die het aanmaakte het kan lezen en schrijven, ongeacht de umask-instelling. Kan nohup niet in de huidige map schrijven, dan schrijft het naar $HOME/nohup.out in de thuismap, en lukt dat ook niet, dan voert het de opdracht niet uit.

Toen een opdracht met uitvoer via nohup draaide, bleef de uitvoer na afloop van de opdracht in nohup.out staan.

nohup sh -c 'echo start; sleep 2; echo end' &
[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'
cat nohup.out
start
end
[1]+  Done                    nohup sh -c 'echo start; sleep 2; echo end'

Done op de laatste regel is de melding van de shell dat de taak klaar is. nohup.out wordt niet bij elke run opnieuw aangemaakt, maar aangevuld aan het eind van hetzelfde bestand. Start je meerdere taken vanuit dezelfde map, dan raakt hun uitvoer in één bestand door elkaar.

Wil je per taak een eigen log, geef dan met > het uitvoerbestand op en stuur met 2>&1 ook de foutuitvoer naar hetzelfde bestand.

nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &
[1] 3432059
cat job.log
nohup: ignoring input
start

Met 2>&1 erbij toonde de terminal alleen het taaknummer en de PID, en kwam de melding van nohup [nohup: ignoring input] op de eerste regel van het logbestand.

Zet je alleen > erbij en laat je 2>&1 weg, dan verschijnt in de terminal een melding dat de foutuitvoer naar het bestand van de standaarduitvoer wordt omgeleid.

nohup sleep 300 > job2.log &
[2] 3432097
nohup: ignoring input and redirecting stderr to stdout

De uitvoer van taken die je niet hoeft te bewaren, stuur je naar /dev/null. Ook dan toonde de terminal alleen het taaknummer en de PID.

nohup sleep 300 > /dev/null 2>&1 &
[3] 3432137

De tabel hieronder laat voor de vier manieren van starten zien waar de uitvoer heen ging en welke melding in de terminal verscheen.

Manier van startenWaar de uitvoer heen gaatMelding in de terminal
nohup opdracht &nohup.out in de huidige mapnohup: ignoring input and appending output to 'nohup.out'
nohup opdracht > bestand &Opgegeven bestand (inclusief foutuitvoer)nohup: ignoring input and redirecting stderr to stdout
nohup opdracht > bestand 2>&1 &Opgegeven bestandGeen (melding op de eerste regel van het bestand)
nohup opdracht > /dev/null 2>&1 &WeggegooidGeen

3️⃣ nohup-processen controleren en stoppen

  • ↪️ jobs, ps, kill

De jobs-lijst toont alleen taken die vanuit de huidige shell zijn gestart. Heb je de terminal gesloten en opnieuw verbinding gemaakt, controleer een nohup-proces dan met ps -p en de PID. Zolang je in dezelfde shell bent, toont jobs -l het taaknummer, de PID en de status samen.

jobs -l
[1]+ 3431609 Running                 nohup sleep 300 &

Zet je een PID achter ps -p en kies je kolommen met -o, dan verschijnt alleen de regel van dat proces. S in STAT betekent dat het proces slaapt en op een gebeurtenis wacht; ELAPSED is de tijd sinds de start.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3431609 S          00:03 sleep 300

Om te stoppen gebruik je kill met de PID erachter.

kill 3431609

kill gaf niets weer, en toen daarna jobs werd uitgevoerd, verscheen de taak als Terminated en verdween hij uit de lijst.

jobs
[1]+  Terminated              nohup sleep 300

Toen ps opnieuw met dezelfde PID werd uitgevoerd, verscheen alleen de kopregel; daarmee was bevestigd dat het proces gestopt was.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD

nohup negeert alleen het verbrekingssignaal, dus ook als je datzelfde signaal rechtstreeks stuurt met [kill -HUP], stopt het proces niet. kill -HUP werd gestuurd naar sleep 305, gestart met nohup, en naar sleep 306, gestart zonder nohup.

kill -HUP 3437119 3437128

Een controle met jobs -l liet daarna alleen de nohup-taak nog als Running zien, terwijl sleep 306 met Hangup was gestopt.

jobs -l
[1]- 3437119 Running                 nohup sleep 305 &
[2]+ 3437128 Hangup                  sleep 306

Geef je kill geen signaal mee, dan stuurt het SIGTERM, dus ook een taak die met nohup is gestart, stopt met [kill PID].

4️⃣ nohup-commando en disown vergeleken, opties

  • ↪️ disown -h, wanneer je tmux kiest, en de opties op een rij

🔲 nohup en disown vergeleken

disown is een ingebouwde bash-opdracht voor taken die al draaien: je koppelt er een taak die met & maar zonder nohup is gestart achteraf mee los van het verbrekingssignaal van de terminal. disown stuurt de uitvoer niet naar nohup.out, dus bij een taak met uitvoer leg je bij het starten met > bestand vast waar de uitvoer heen gaat.

Volgens de officiële Bash-handleiding haalt disown zonder opties de taak uit de jobs-lijst, terwijl disown -h hem in de lijst laat en alleen voorkomt dat het verbrekingssignaal hem bereikt. Eerst werd sleep 302 gestart en daarna disown uitgevoerd.

sleep 302 &
[1] 3433230
disown

disown gaf niets weer, en ook jobs -l, direct daarna uitgevoerd, gaf een leeg resultaat.

jobs -l

Daarna werd sleep 303 gestart en disown -h uitgevoerd op taaknummer %1.

sleep 303 &
[1] 3433343
disown -h %1

Een controle met jobs -l liet zien dat de taak nog in de lijst stond.

jobs -l
[1]+ 3433343 Running                 sleep 303 &

Daarbij werd nog een sleep 304 zonder enige behandeling gestart, de terminal gesloten en vanuit een andere shell de drie PID's gecontroleerd.

sleep 304 &
[2] 3433474
ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3433230 S          00:11 sleep 302
3433343 S          00:08 sleep 303

De twee taken met disown en disown -h bleven over, en alleen sleep 304 zonder behandeling stopte. De vier methoden naast elkaar:

MethodeWanneerjobs-lijstNa het sluiten van de terminalUitvoer
nohup opdracht &Bij het startenBlijftBlijftnohup.out of opgegeven bestand
opdracht & en dan disownNa het startenOvergeslagenBlijftNiet gewijzigd
opdracht & en dan disown -hNa het startenBlijftBlijftNiet gewijzigd
Alleen opdracht &—BlijftBeëindigdNiet gewijzigd

Voor werk waarbij je het sessiescherm weer moet oproepen en verder moet typen, past een terminalmultiplexer zoals tmux; voor werk dat je één keer start en waarvan je alleen het resultaat uit een bestand haalt, is nohup genoeg.

🔲 Opties van het nohup-commando

📌 Belangrijkste opties: resultaten uit dit artikel

OptieTaakResultaat in dit artikel
--versionToont versie-informatie en stoptAlmaLinux 9.8-server: nohup (GNU coreutils) 8.32, Debian 12-server: nohup (GNU coreutils) 9.1

📎 Andere opties: volgens de officiële handleiding

OptieTaak
--helpToont de hulp en stopt

🔲 Simulator van het nohup-commando

In de simulator hieronder start je een taak met nohup, sluit je de terminal met de 🔌-chip, maak je opnieuw verbinding en zie je zelf welke processen overblijven.

Simulator van het nohup-commandocoreutils 8.32
[root@server work]#
Werkt alleen in je browser en start geen echte processen. De sleep-tijd loopt mee met de echte klok, en met ↑↓ haal je eerdere opdrachten terug.

🔢 FAQ & aanbevolen content

Volgens de officiële GNU-handleiding stopt nohup met 125 als nohup zelf mislukt, met 126 als de opdracht is gevonden maar niet kon worden uitgevoerd, en met 127 als de opdracht niet is gevonden. Op een AlmaLinux 9-server gaf alleen nohup zonder opdracht 125, ./job.sh zonder uitvoerrecht 126 en de niet-bestaande opdracht nosuchcmd 127.

nohup verandert de nice-waarde niet, dus gebruik je nice erbij, zoals in [nohup nice -n 10 sleep 307 &]. Een sleep die zo was gestart, liet in ps 10 zien in de kolom NI en SN in STAT, met de N die lage prioriteit aangeeft.

Het nohup-commando heeft maar twee opties: [--help] en [--version]. Volgens de officiële GNU-handleiding komen opties vóór de opdracht die je uitvoert.

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 4   +   4   =