“<command> & disown” ve “nohup <command> & disown” arasındaki farklar


41

Bu kullanımı hakkında benim anlayış &, disownve nohup:

  • <command>: Terminal akımı içindeki işlemi çalışır bash, örneğin ön planda (yani işlem olarak listelenen bashön iş ve stdin, stdoutve stderryine de vardır uç bağlanmış ); takıntılara bağışık değil ;
  • <command> &: Terminal akımı içindeki işlemi çalışır bash, örneğin arka plan (yani işlem olarak listelenen basharka işi ve stdin, stdoutve stderryine de vardır uç bağlanmış ); takıntılara bağışık değil ;
  • <command> & disown: Terminal geçerli olan işlem çalıştırarak bash, örneğin arka planda , ama süreç olduğunu ayrılmış bash'ın jobs' listesinde (yani süreç olarak listelenmemiş bashön plan / arka plan işi ve stdin, stdoutve stderrhala olan terminale bağlı ); takılmalar için bağışıklık ;
  • nohup <command> & disown: Terminal geçerli olan işlem çalıştırarak bash, örneğin arka planda , ama süreç olduğunu ayrılmış bash'ın jobs' listesinde (yani süreç olarak listelenmemiş bashön plan / arka plan işi ve stdin, stdoutve stderrvardır değil hala terminale bağlı ) ; takılmalar için bağışıklık ;

Bu nedenle, nohup <command> & disownengelleme stdinve yönlendirmenin stdoutyanı stderrsıra nohup.outvarsayılan olarak da, tamamen eşdeğer sayılabileceği gibi görünüyor <command> & disown.

Yukarıdakilerin hepsi doğru mu? Herhangi bir yanlış anlama?


1
Ne demek "takmalara karşı bağışıklık" ve "takmalara karşı bağışıklık değil"?
Kaos

2
@chaos Yani ana vakayı sonlandırmak / öldürmek bashsüreci öldürmez
kos

Yanıtlar:


31

Anlayışınız temel olarak doğru. Hem disownve nohupçalıştırmakta işleri durmadan çalışan bir kabuk oturumu çıkmak için izin vermek için kullanılır. Bazı açıklamalar:

  • Çalıştırmak için bir sebep yok nohup command & disown, nohupzaten sizin için inkâr ederler.

  • nohupolan POSIX'deki tarafından tanımlanan ise disown değildir . Fazla kabuk (örn iken bu araçlar o bash, zsh, ksh) buna sahip, diğerleri (örneğin tcsh, csh, dashve sh) buna izin vermem.

  • disownkullanılabilecek sonra ise bir komut başlatıldı nohupönce kullanılması gerekir.

Söyleyebileceğim kadarıyla, iki komutun gerçek etkisi aynı. Her birinin diğerinin sahip olmadığı özelliklere sahip (bkz. help disownVe man nohup) ancak temel işlevleri aynı, evet.

Bu araçların ve aralarındaki farkların daha ayrıntılı bir tartışması için buradaki cevaplara bir göz atın:


11
Nohupve disownaynı şey değildir ve her iki komutu birlikte kullanmak gereksiz değildir. Ayrıntılı bir açıklama için bu cevabı gör
not

7

İlk üçüncü puanınız iyi görünüyor, ancak stdin, stdout and stderr are still bound to the terminaldoğru bir fikir değil. stdinher zaman terminale dosya adını her zaman terminal üzerinden bir komutla veya terminali kullanan yollarla girdiğiniz anlamında bağlanır. stdout and stderr are still bound to the terminaltamam.

Sizin sahip stdin, stdout and stderr are not still bound to the terminalsağ olarak benim daha önceki paragrafta belirtilen değildir dördüncü noktası. Ayrıca burada /dev/nullgiriş dosyası olarak kullanıyorsunuz command, örneğin komut ise cat, onu kullanıyorsunuz cat /dev/null.

5. noktanızdaki komut doğru bir şekilde yazılmadı, kullandınız nohup <command> & disown, herhangi birini kullanırken nohupya disownda diğerini kullanmanıza gerek yok. Amaçları aynıdır (görmezden gelmek için SIGHUP) ancak biraz farklı bir şekilde çalışırlar. Böylece komut basitleştirilebilir nohup <command> &.

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.