Bir linux komutunun sonundaki "&" ne anlama geliyor?


99

Ben bir sistem yöneticisiyim ve sistemi temizlemek için bir linux komut dosyası çalıştırmam istendi.

Komut şudur:

perl script.pl > output.log &

öyleyse bu komut bir &işaretle bitiyor , bunun özel bir anlamı var mı?

Temel kabuk bilgisine sahibim ama bunu daha önce hiç görmedim.


özür dilerim, çok basit şeyler biliyordum
Ahbap

3
Eğer arasındaki fark arayan bu sayfasındaysanız &ve &&: &Arka planda ilk komutu yürütür; &&başarılı bir şekilde çıkarsa ilk komutu yürütür ve koşullu olarak ikinciye geçer.
David Bodow

Yanıtlar:


151

&Arka planda çalışacak komutu yapar.

Kimden man bash:

Kontrol operatörü & tarafından bir komut sonlandırılırsa , kabuk komutu arka planda bir alt kabukta yürütür. Kabuk, komutun bitmesini beklemez ve dönüş durumu 0'dır.


13

Ek olarak, minimum sayıda terminali tutmak için birçok işlemi bir (1) ssh bağlantısı üzerinden çalıştırmak için "&" işaretini kullanabilirsiniz. Örneğin, dosyaları ayıklamak için mesajları dinleyen bir işlemim var, ikinci işlem dosyaları yüklemek için mesajları dinliyor: "&" seçeneğini kullanarak her iki hizmeti de sunucuma tek bir ssh bağlantısı aracılığıyla tek bir terminalde çalıştırabilirim .


***** Az önce fark ettim ki "&" ile çalışan bu süreçler ssh oturumu kapandıktan sonra da "canlı kalacak"! sunucu bağlantınız kesilirse oldukça düzgün ve kullanışlıdır **


nohupsüreçleri de canlı tutacak.
Jerry Chin

2
ile & biz de PID alabiliriz, böylece istersek süreci sonlandırabiliriz ve ayrıca bu sürecin durumunu kontrol edebiliriz
Dhaval Solanki

13

Aksi söylenmediğinde komutlar ön planı ele geçirir. Tek bir kabuk oturumunda çalışan yalnızca bir "ön plan" işleminiz var. & Sembolü, komutlara bir arka planda çalışma talimatını verir ve ek komutlar için hemen komut satırına geri döner.

sh my_script.sh &

Bir arka plan işlemi olacak değil kabuk oturumu kapatıldıktan sonra hayatta kalmak. SIGHUP, çalışan tüm işlemleri sonlandırır. Yine de varsayılan olarak. Komutunuz uzun sürüyorsa veya süresiz olarak çalışıyorsa (yani mikro hizmet), oturumdan bağlantıyı kestikten sonra çalışmaya devam etmesi için nohup ile önceden beklemeniz gerekir:

nohup sh my_script.sh &

DÜZENLEME: & kullanıldığında arka plan işlemlerinin kapatılmasıyla ilgili gri bir alan görünüyor. Sadece kabuk farkında olabilir : OS ve (özellikle CentOS / RHEL üzerine) yerel yapılandırmaları bağlı olarak süreci kapatmak https://serverfault.com/a/117157 .


3

Kesin olarak bilmiyorum ama şu anda bir kitap okuyorum ve aldığım şey, bir programın sinyalini idare etmesi gerektiğidir (bastığımda olduğu gibi CTRL-C). Artık bir program SIG_IGNtüm sinyalleri yok saymak veya SIG_DFLvarsayılan eylemi geri yüklemek için kullanabilir.

Şimdi yaparsanız $ command &, arkaplan işlemi olarak çalışan bu işlem, oluşacak tüm sinyalleri yok sayar. Ön plan süreçleri için bu sinyaller göz ardı edilmez.

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.