Tl; dr:
sleepOturumu kapattığımda ve terminal kapandığında neden süreç hayatta kalabilir? Aklımda, nohupoturum kapatma sırasında cinler ve programlar dışında her şey öldürülecek. Eğer sleepbu şekilde yaşayabilir, ben yerine bu yöntemi kullanabilirsiniz anlamına gelmez nohupkomuta?
Sürece bashtarafından kökenli örneği sshvardır huponexitseçeneği ayarlanmış, hiçbir işlem oturumu / Çıkışta herhangi ortalama tarafından sonlandırılır ve ne zaman huponexitopsiyon ayarlanır kullanılarak kill -9kabuk üzerinde kullanmanın iyi bir alternatif değildir nohupkabuğunuzun çocuk süreçlerine; nohupKabuğun alt süreçleri onları kabuktan gelmeyen YAVAŞLAR'dan koruyacaktır ve bu önemli olmasa bile nohupkabuğun incelikle sonlandırılmasına izin verdiği için hala tercih edilmelidir.
In bashadlı bir seçenek var huponexitseti yapacak olursa, bashSIGHUP çıkış / Çıkış yapıldığında alt öğeleri;
Etkileşimli oturum açma dışı bash durumlarda, bashörneğin ortaya çıktığı bir örnekte gnome-terminal, bu seçenek yoksayılır; huponexitset veya unset olsun , bashçocukları bashçıkışta asla SIGHUPped olmayacaktır ;
Oluşan bir örnek gibi etkileşimli oturum açma bash örneklerinde bu seçenek yok sayılmaz (ancak varsayılan olarak ayarlanmamıştır); eğer ayarlanırsa, 'çocukları tarafından SIGHUPped olacak çıkış / Çıkış yapıldığında; eğer ayarlanmazsa, 'çocukları tarafından SIGHUPped olmayacak çıkış / Çıkış yapıldığında;bashsshhuponexitbashbashhuponexitbashbash
Bu nedenle, genel olarak etkileşimli bir oturum açma bashörneğinden çıkmak / oturumu kapatmak , huponexitseçenek ayarlanmadığı sürece, kabuk SIGHUP'u çocuk yapmaz ve etkileşimli oturum açma dışı bir durumdan çıkmak / oturumu kapatmak bashkabuk SIGHUP'u çocuk yapmaz. ne olursa olsun;
Bununla birlikte, bu, bu durumda ilgisizdir: kullanım kill -9 sleep, ne olursa olsun, ana sürecini ( bash) öldürmek , ikincisinin öncekine bir şey yapma şansı bırakmayacaktır (örneğin, mevcut bashörnek bir giriş bashörneği ise ve huponexitseçenek SIGHUP olarak ayarlandı).
Buna ek olarak, diğer sinyallerin aksine (gönderilen bir SIGHUP sinyali gibi bash), bir SIGKILL sinyali asla bir sürecin alt süreçlerine yayılmaz, dolayısıyla sleepöldürülmez;
nohupfarklı bir şey olan SIGHUP sinyallerine bağışık bir süreç başlatır; bir SIGHUP sinyalinin alınmasının ardından bashbu huponexitseçeneğin ayarlanması ve kabuğun çıkması durumunda etkileşimli oturum açma örneği tarafından alınabilecek sürecin askıya alınmasını önler ; bu nedenle teknik olarak, unset seçeneğiyle nohupetkileşimli bir oturum açma bashörneğinde bir işlemi başlatmak, işlemin huponexitbir SIGHUP sinyalinin alınması üzerine takılmasını önler, ancak kabuktan çıkıp / oturumu kapatmak, ne olursa olsun SIGHUP yapmayacaktır;
Bununla birlikte, genel olarak, nohupana kabuktan SIGHUP sinyallerinin gelmesini önlemek için gerekli olduğunda , kill -9ana yöntemi nohupon alt yöntemine tercih etmek için hiçbir neden yoktur ; bunun yerine tam tersi olmalıdır.
Ebeveynin kill -9yöntemi kullanarak öldürülmesi, ebeveynin zarif bir şekilde çıkması için bir şans bırakmazken, nohupyöntemi kullanarak çocuğa başlamak , ebeveynin SIGHUP (bağlamda mantıklı bir örnek yapmak) gibi diğer sinyallerle sonlandırılmasına izin verir. Kullanmaya başladı nohup).
&işlemi arka plana (daemon gibi) çatacak ve oturumu kapatmış olmanıza rağmen çalışmaya devam edecektir.