Yanıtlar:
Hangisi daha iyi, balık mı yoksa bisiklet mi? nohupve execfarklı şeyler yapın.
execkabuğu başka bir programla değiştirir. Kullanımı exec: Basit bir arka plan işinde yararlı değildir exec myprogram; more stuffile kabuk değiştirir myprogramçalışmayacak şekilde ve more stufffarklı olarak myprogram; more stuffhangi ishal more stuffolduğunda myprogramsonlandırır; fakat arka planda exec myprogram & more stuffbaşlar myprogramve sonra more stuffolduğu gibi çalışır myprogram & more stuff.
nohupBelirtilen programı göz ardı edilen SIGHUP sinyaliyle çalıştırır. Bir terminal kapatıldığında, çekirdek bu terminaldeki kontrol işlemine (yani kabuk) SIGHUP gönderir. Kabuk, SIGHUP'ı arka planda çalışan tüm işlere gönderir. Bir işle çalışmak nohup, terminal ölürse (örneğin, uzaktan oturum açtıysanız ve bağlantı kesilirse veya terminal emülatörünüzü kapatırsanız olur), bu şekilde ölmesini önler.
nohupayrıca programın çıktısını dosyaya yönlendirir nohup.out. Bu, programın ölmesini önler, çünkü çıktısına veya hata çıktısına yazamaz. Not nohupgirişi yönlendirmez. Bir programı başlattığınız terminalden tamamen ayırmak için
nohup myprogram </dev/null >myprogram.log 2>&1 &
exec firefox, kabuk artık çalışmıyor: değiştirildi firefox. execBir programdan çıkmayı ve yeni bir program başlatmayı birleştirmeyi, ancak aynı süreç kimliğini korumayı düşünebilirsiniz . Terminal hiçbir şey durdurmak için söylediği için çalışmasını sağlar. Daha sonra Firefox'tan çıktığınızda firefoxişlem sonlandırılır. Terminal, çocuk sürecinin sona erdiğini ve bu nedenle sırayla çıktığını fark eder.
exec & => bir işlemi arka plan işlemi olarak yürütür, böylece aynı terminali diğer işler için kullanmaya devam edebilirsiniz.
nohup => tüm SIGHUP işlemlerini engeller (sinyali sonlandırır) ve terminal kapalı olsanız bile çalışmaya devam eder.
execa SIGHUPalındığında işlem ölür , ancak nohupişlem devam eder.
execolarak çalışan sürecin yerini alır, ancak &exec'd komutunun arkaplanını kullandığınızda bu gerçekleşmedi . Ne bash ne de zsh.
exec smth &olan bu (exec smth) &değil mi?
(exec smth) &. Ama aynı olmasını beklemiyordum - bir sözdizimi hatası olmasını beklerdim, bir işlemi nasıl yürütürsün (kendini değiştiriyorsun) ve daha sonra çalıştırılan sürecin arkaplanı? Artık yapmak için orada değilsin.
Yerleşik komut exec <command>, kabuğu değiştirir, <command>yeni bir işlem yoktur, yeni PID oluşturulmaz. <command>Normalde tamamlandıktan sonra terminaliniz kapanır. Arkaplanda çalıştırılarak ilk önce bir alt kabuk oluşturulur ve benzer şekilde hemen yerine geçer <command>.
nohup <command> Komut çalışır <command>ancak immume hangups (= S 1 öldürmek) kadar kabuk, bunun başlatıldığı terminali, kapalı olduğu zaman sona edilmez. İlk önce arka planda çalıştırarak bir alt kabuk oluşturulur ve komut arka planda çalışır ve sizi isteme döndürür.
Komut <command>dosyasında , hemen hemen aynı olsa da, hemen hemen aynı olur, komut dosyanız tarafından başlatılır ve komut dosyası <command>başlamak, çıktı göndermek veya tamamlamak için beklemeden devam eder .
script.sh &veya yapmak arasında sadece küçük bir fark görebiliyorum exec script.sh &. Her iki durumda da, komut bir çocuk işleminde yürütülür, arama işleminin yerine geçmez, bkz: paste.alacon.org/44474 (buraya bir yorumda kopyalamak çok uzun…). Neyi yanlış yapıyorum?
Karşılaştırmak olamaz nohupile exec. Bir yürütülebilir dosyayı çalıştırdığınızda nohup, oturum kapattığınızda işlem öldürülmez (ssh session); genellikle süreçleri daha düşük bir öncelikte çalıştırmak nohupiçin kullanılır nice. HUPSinyal, geleneksel olarak, bir şekilde bir uç oturum kapatma bağlı süreçleri uyarır olan