Nohup komutunun işlevi nedir?


18

Ben Ubuntu'da bir acemiyim. Bir komut öğrendim

nohup [command]- <command>kapatma sinyaline karşı bağışıklık çalıştırın

" Kilitlenme sinyaline karşı bağışıklık " anlamını anlayamıyorum . Ne tür bir sinyalden bahsediyor? Ve lütfen bana bu komutu bir örnekle nasıl kullanacağımı söyle.


Kabuğunuzda mevcutsa, disowndaha iyi bir alternatiftir nohup. Komutu command &veya ile arka plan yapın Ctrl-Z, sonra disownkabuğundan ayırmak için kullanın .
John Kugelman,

@JohnKugelman yeterli değil , giriş, çıkış ve hata akışını da yönlendirdiniz. Peki, bunu sizin için otomatik olarak yapan 'nohup' neden kullanılmıyor?
miracle173

Yanıtlar:


34

geditBir terminalden bir metin editörü açıp üzerinde çalıştığınızı düşünelim . Terminali kapatmadan önce kapatırsanız, geditgedit terminali kapatır kapatmaz da kapanır. Peki burada neler oluyor? geditTerminalin altında bir alt işlem olarak çalışır. Terminali kapattığınızda , alt işlemi öldüren işleme bir kapatma sinyali ( SIGHUP) gönderilir.

Öte yandan gedit, ana terminali kapattıktan sonra bile çocuk işleminizin (burada ) çalışmaya devam etmesini istiyorsanız, bağışıklığınızın askıda kalma sinyali almasını istersiniz. Böylece terminalin kapatılması çocuk sürecini kapatmaz. nohuptam olarak bu işi yapıyor.

nohupbir komutun terminal bağlantısını kesmezse, komut dosyanız SIGHUP'u yoksayır ve stdout / stderr dosyasını nohup.out dosyasına yönlendirir, böylece komut oturumu kapattıktan sonra arka planda çalışmaya devam edebilir. Kabuğu / terminali kapatırsanız veya oturumu kapatırsanız, komutunuz artık bu kabuğun alt öğesi değildir. Başlangıç ​​sürecine aittir. Arama pstreeyaparsanız, artık işlem 1'e (init) ait olduğunu göreceksiniz. Bu ön plana geri getirilemez çünkü ön plan artık mevcut değildir.


16

@Sourvac'ın yazdıklarının yanı sıra, insanların sadece metinli aptal terminallerle, genellikle (orijinal, 110 analog baud) modemle giriş yaptıkları Günün Geri Mirası: "telefonu kapat" kelimenin tam anlamıyla "telefonu kapatıyor" ".

Telefonu kapattıktan ve telefonu kapattıktan sonra bile, kapalı sinyaline karşı bağışık olmayan bir pid çalışmaya devam edecektir . İşler saatlerce çalıştığında yavaş bilgisayarlarda çok kullanışlıdır ve oturumunuzu açık tutamazsınız (terminali kullanmak için başka biri gerekir, telefonu kullanmanız gerekir, hattaki statik bağlantıyı "kesebilir" , vb).


1
Sadece gün içinde deđil. Büyük işlerimin çoğunu ssh yaptığım bir sunucu kümesinde çalıştırıyorum. Nohup kullanmasaydım, işlerin bitmesini beklerken dizüstü bilgisayarımı günlerce bu makinelere bağlı bırakmam gerekirdi.
Ray

@ "On" üzerinden veya cron işleri olarak çalıştırmaya ne dersiniz?
RonJohn

@RonJohn Tabii. Veya bir ızgara motoru ile. Nohup'un tek seçenek olduğunu öne sürmek istemedim, sadece bugün hala bu amaç için kullanılıyor.
Ray

1
Belki tarihsel yorumlarınız doğrudur. Ancak bugünkü önemi ile ilgili sonuçlarınız yanlış. Yavaş bilgisayarlarda yararlı değildir, ancak uzun süren işler için yararlıdır. Bunlar iki farklı şey. İşinizi terminalinizin amaçlanan veya istenmeyen bağlantı kesilmesine karşı korumak için 'nohup' kullanın. Günümüzde bile, bir ağ hatası terminalinizin bağlantısını kestiğinden ve işiniz iptal edildiğinden bir işin iptal edilmesinden memnun değilsiniz.
miracle173

@Ray Cron işleri bunu başarmak için tamamen uygunsuzdur. Cronjobs periyodik görevler içindir, cronjob'daki ortamı ayarlamanız ve diğer birçok şeyi düşünmeniz gerekir. Belki 'at' işlemek biraz daha kolaydır ama yine de nohup'tan daha karmaşıktır.
miracle173
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.