nohup komutu: kullanımı, nohup.out ve terminal kapansa da çalışmaya devam etmek

Test ortamıRHEL ailesiAlmaLinux 9.8coreutils 8.32root hesabıDebian 12 · coreutils 9.1 normal hesap2026-11-05 tarihinde kontrol edildi
Terminal kapansa da çalışmaya devam eder

Terminali kapattığınızda ya da SSH bağlantısı koptuğunda bir işin çalışmaya devam etmesi için onu nohup komutuyla başlatın. nohup, terminal kapanırken gelen bağlantı kopma sinyalini (SIGHUP) yok saydırarak komutu çalıştırır. Bir AlmaLinux 9 sunucusunda nohup eklenmiş bir sleep ile eklenmemiş bir sleep birlikte başlatılıp terminal kapatıldığında yalnızca nohup ile başlatılan çalışmaya devam etti.

Aşağıdaki çıktılar bir AlmaLinux 9.8 sunucusunda (root hesabı) ve bir Debian 12 sunucusunda (normal hesap) alındı. Uzun süren bir iş yerine sleep başlatıldı ve durdururken yalnızca başlatırken alınan PID belirtildi. Saatler UTC olarak yazdırıldı.

1️⃣ nohup komutu nasıl kullanılır

  • ↪️ Sondaki & ve terminali kapattığınızda olanlar

nohup çalıştırılacak komutun önüne yazılır ve komutun sonundaki & ile arka planda çalıştırma belirlenir. Resmî GNU kılavuzuna göre nohup'un kendisi komutu arka plana göndermez; bu yüzden & olmadan komut bitene kadar komut istemi geri gelmez.

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

[1] iş numarası, 3431609 ise başlatılan sürecin PID'sidir. Ardından çıkan ileti, klavye girdisinin okunmayacağını ve çıktının nohup.out dosyasına ekleneceğini bildiriyor.

Az önce başlattığınız işin PID'si $! içinde kalır. Başlattıktan hemen sonra [echo $!] ile kontrol edip not alırsanız, durumuna bakarken ya da işi sonlandırırken aynı numarayı kullanırsınız.

echo $!
3431609

Terminal kapanınca kabuk bağlantı kopma sinyalini alır ve aynı sinyali kendi başlattığı işlere de gönderir (resmî Bash kılavuzuna göre). Bunu doğrulamak için yeni bir terminalde [nohup sleep 300 &] ile nohup olmadan [sleep 301 &] birlikte başlatıldı.

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

İki iş de Running durumundayken terminal penceresi kapatıldı ve başka bir kabuktan iki PID ps ile kontrol edildi.

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

Yalnızca nohup ile başlatılan sleep 300 kaldı; nohup olmadan başlatılan sleep 301 terminal kapanırken birlikte sona erdi.

nohup ile başlatılan bir süreç, Rahatsız Etmeyin modu açık bir telefon gibidir.

nohup, coreutils paketinde bulunan bir komuttur. Kurulu sürümü --version çıktısının ilk satırından görürsünüz. AlmaLinux 9.8 sunucusunda 8.32, Debian 12 sunucusunda 9.1 vardı.

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

2️⃣ nohup.out ve çıktı yönlendirme

  • ↪️ Günlük dosyası belirleme ve /dev/null

Çıktının nereye gideceğini belirlemezseniz nohup, komutun çıktısını geçerli klasördeki nohup.out dosyasına ekler. İlk oluşturulan nohup.out 0 bayttı ve izinleri yalnızca onu oluşturan kullanıcının okuyup yazabildiği -rw------- idi.

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

Resmî GNU kılavuzu, nohup'un nohup.out dosyasını umask ayarından bağımsız olarak yalnızca oluşturan kullanıcının okuyup yazabileceği şekilde oluşturduğunu açıklar. Geçerli klasöre yazamazsa ev klasöründeki $HOME/nohup.out dosyasına yazar, oraya da yazamazsa komutu çalıştırmaz.

Çıktı üreten bir komut nohup ile çalıştırıldığında, komut bittikten sonra çıktı nohup.out içinde kaldı.

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'

Son satırdaki Done, kabuğun işin bittiğini bildiren iletisidir. nohup.out her çalıştırmada yeniden oluşturulmaz, aynı dosyanın sonuna eklenir; bu yüzden aynı klasörden birkaç iş başlatırsanız çıktılar tek bir dosyada karışır.

Her iş için ayrı günlük tutmak isterseniz > ile çıktı dosyasını belirleyin ve 2>&1 ile hata çıktısını da aynı dosyaya gönderin.

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

2>&1 de eklenince terminalde yalnızca iş numarası ve PID göründü, nohup'un bilgi iletisi [nohup: ignoring input] ise günlük dosyasının ilk satırına yazıldı.

Yalnızca > ekleyip 2>&1'i çıkarırsanız terminalde, hata çıktısının standart çıktı dosyasına yönlendirildiğini bildiren bir ileti çıkar.

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

Saklamanız gerekmeyen işlerin çıktısını /dev/null'a gönderin. Bu durumda da terminalde yalnızca iş numarası ve PID göründü.

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

Dört çalıştırma biçiminde çıktının gittiği yer ve terminalde çıkan ileti aşağıdaki gibidir.

Çalıştırma biçimiÇıktının gittiği yerTerminalde çıkan ileti
nohup komut &Geçerli klasördeki nohup.outnohup: ignoring input and appending output to 'nohup.out'
nohup komut > dosya &Belirtilen dosya (hata çıktısı dahil)nohup: ignoring input and redirecting stderr to stdout
nohup komut > dosya 2>&1 &Belirtilen dosyaYok (bilgi iletisi dosyanın ilk satırında)
nohup komut > /dev/null 2>&1 &AtılırYok

3️⃣ nohup süreçlerini kontrol etme ve sonlandırma

  • ↪️ jobs, ps, kill

jobs listesi yalnızca geçerli kabukta başlatılan işleri gösterir; bu yüzden terminali kapatıp yeniden bağlandıktan sonra nohup sürecini ps -p ile PID belirterek kontrol edin. Aynı kabukta olduğunuz sürece jobs -l iş numarasını, PID'yi ve durumu birlikte gösterir.

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

ps -p'den sonra PID yazıp -o ile sütunları seçerseniz yalnızca o sürecin satırı çıkar. STAT'taki S, bir olayı bekleyerek uyuduğu durumu; ELAPSED ise başlangıçtan bu yana geçen süreyi gösterir.

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

Sonlandırmak için kill komutundan sonra PID'yi yazın.

kill 3431609

kill hiçbir şey yazdırmadı; ardından jobs çalıştırılınca iş Terminated olarak göründü ve sonra listeden çıktı.

jobs
[1]+  Terminated              nohup sleep 300

Aynı PID ile ps yeniden çalıştırılınca yalnızca başlık satırı çıktı ve sürecin sona erdiği doğrulandı.

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

nohup yalnızca bağlantı kopma sinyalini yok saydığı için aynı sinyali [kill -HUP] ile doğrudan gönderseniz de süreç sona ermez. nohup ile başlatılan sleep 305'e ve nohup olmadan başlatılan sleep 306'ya kill -HUP gönderildi.

kill -HUP 3437119 3437128

Ardından jobs -l ile bakıldığında yalnızca nohup tarafı Running olarak kaldı, sleep 306 ise Hangup ile sona erdi.

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

kill'e sinyal belirtmezseniz SIGTERM gönderir; bu yüzden nohup ile başlatılan bir iş de [kill PID] ile sona erer.

4️⃣ nohup komutu ile disown karşılaştırması ve seçenekler

  • ↪️ disown -h, tmux'u seçme ölçütü ve seçeneklerin özeti

🔲 nohup ile disown karşılaştırması

disown, zaten başlatılmış işlerde kullanılan bir bash yerleşik komutudur; nohup olmadan & ile başlatılan bir işi sonradan terminalin bağlantı kopma sinyalinden ayırmak için kullanılır. disown çıktıyı nohup.out'a yönlendirmez; bu yüzden çıktı üreten işlerde, başlatırken > dosya ile çıktının gideceği yeri belirleyin.

Resmî Bash kılavuzuna göre disown seçeneksiz kullanılırsa iş jobs listesinden çıkar; disown -h ise işi listede bırakıp yalnızca bağlantı kopma sinyalinin ona gönderilmesini engeller. Önce sleep 302 başlatıldı, ardından disown çalıştırıldı.

sleep 302 &
[1] 3433230
disown

disown hiçbir şey yazdırmadı; hemen ardından çalıştırılan jobs -l de boş sonuç verdi.

jobs -l

Sonra sleep 303 başlatıldı ve iş numarası %1 için disown -h çalıştırıldı.

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

jobs -l ile bakıldığında iş listede kalmaya devam ediyordu.

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

Buna hiçbir işlem yapılmamış bir sleep 304 daha eklendi, terminal kapatıldı ve başka bir kabuktan üç PID kontrol edildi.

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

disown ve disown -h uygulanan iki iş kaldı; hiçbir işlem yapılmamış sleep 304 ise sona erdi. Dört yöntemin karşılaştırması aşağıdadır.

YöntemNe zamanjobs listesiTerminal kapandıktan sonraÇıktı
nohup komut &BaşlatırkenKalırKalırnohup.out veya belirtilen dosya
komut & sonra disownBaşlattıktan sonraAtlanırKalırDeğişmez
komut & sonra disown -hBaşlattıktan sonraKalırKalırDeğişmez
Yalnızca komut &—KalırSona erdiDeğişmez

Oturum ekranını geri çağırıp yazmaya devam etmeniz gereken işler için tmux gibi bir terminal çoğullayıcı uygundur; bir kez başlatıp yalnızca sonucunu dosyadan aldığınız işler için nohup yeterlidir.

🔲 nohup komutunun seçenekleri

📌 Başlıca seçenekler: bu yazıda çalıştırılan sonuçlar

SeçenekGörevBu yazıdaki sonuç
--versionSürüm bilgisini gösterir ve çıkarAlmaLinux 9.8 sunucusu: nohup (GNU coreutils) 8.32, Debian 12 sunucusu: nohup (GNU coreutils) 9.1

📎 Diğer seçenekler: resmî kılavuza göre

SeçenekGörev
--helpYardımı gösterir ve çıkar

🔲 nohup komutu simülatörü

Aşağıdaki simülatörde nohup ile bir iş başlatıp 🔌 çipiyle terminali kapatıp yeniden bağlanabilir ve hangi süreçlerin kaldığını kendiniz görebilirsiniz.

nohup komutu simülatörücoreutils 8.32
[root@server work]#
Yalnızca tarayıcınızın içinde çalışır ve gerçek süreç başlatmaz. sleep süresi gerçek saate göre akar; ↑↓ ile daha önce yazdığınız komutları geri çağırırsınız.

🔢 SSS & önerilen içerikler

Resmî GNU kılavuzuna göre nohup'un kendisi başarısız olursa 125, komut bulunup çalıştırılamazsa 126, komut bulunamazsa 127 ile çıkar. Bir AlmaLinux 9 sunucusunda komutsuz yalnızca nohup yazıldığında 125, çalıştırma izni olmayan ./job.sh için 126, var olmayan nosuchcmd komutu için 127 alındı.

nohup nice değerini değiştirmez; bu yüzden [nohup nice -n 10 sleep 307 &] örneğindeki gibi nice'ı birlikte kullanın. Bu şekilde başlatılan sleep ps ile kontrol edildiğinde NI sütunu 10, STAT ise düşük önceliği gösteren N eklenmiş SN idi.

nohup komutunun yalnızca iki seçeneği vardır: [--help] ve [--version]. Resmî GNU kılavuzuna göre seçenekler çalıştırılacak komuttan önce yazılır.

ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İnsan olduğunuzu kanıtlayın: 8   +   7   =