Arka plan süreçlerinin çıktısını neden görebilirim?

21

Örneğin, ping 8.8.8.8 & yazdığımda neden ping işlemini çalışıyor görebiliriz? Ve find / -name '*test*' & yazdığımda monitörde de görülür.

Neden bu? Gerçekten arka planda değil mi?

    
sordu NoFence 18.08.2015 10:23

2 cevap

32

& komutu, arka planda komutu çalıştırmak için kabuğu yönlendirir; yani, çatallı ve eşzamansız bir iş olarak ayrı bir alt kabukta çalıştırılır.

stdout ve stderr öğelerinin - & 'sini koyarsanız, ekrana yazdırılmaya devam edeceğini unutmayın . Ekranda herhangi bir çıktı görmek istemiyorsanız, hem stdout hem de stderr dosyasını bir dosyaya yönlendirin:

myscript > ~/myscript.log 2>&1 &

Genellikle hataları daha sonra analiz etme konusunda endişelenmiyorsanız, stderr 'yi yeniden% co_de yönüne yönlendirerek iptal edebilirsiniz.

Ayrıca, komutları / komut dosyalarını aynı zamanda ayrı alt kabuklarda da çalıştırabilirsiniz. Örneğin;

./script1 & ./script2 & ./script3 & 

Arka plandaki iş, komutla tamamlanmadan önce komut satırına geri getirilebilir:

fg <job-number>

/dev/null çalıştırılarak elde edilebilir

jobs
    
verilen cevap Ron 18.08.2015 10:33
8

& öğesini kullandığınızda, işlem arka planda çalışır. Ama standart çıkışı hala terminal.

Aslında, ping 8.8.8.8 & ve find / -name '*test*' & 'yi aynı anda çalıştırabilirsiniz (karma çıktıyla sonuçlanır), ancak aynı kabukta aynı anda ping 8.8.8.8 ve find / -name '*test*' çalıştırmayabilirsiniz.

Hiçbir şey görmek istemiyorsanız, ping 8.8.8.8 &> /dev/null & gibi bir şey kullanın.

Ayrıca, nohup ve disown hakkında bilgi edinmek isteyebilirsiniz.

    
verilen cevap Andrea Corbellini 18.08.2015 10:33

Etiketlerdeki diğer soruları oku