, bash

2010-04-28 10 views
13

üzerinden linux'ta tamamen ayrı bir işlem oluşturuyor. Bir komut dosyasını çalıştırmam gerekiyor (bash veya perl veya php, başka bir işlem yapacak) ve sonra çıkıp diğer komut hala kendi başına çalışacak ve çıkacaktır. Komutla program yapabilirim, ancak daha kolay bir yol olup olmadığını merak ettim., bash

+0

Programlama cron ile bir seçenek midir? –

+0

İhtiyaçlarınız üzerinde durmak isteyebilirsiniz, çünkü doğru cevap buna bağlı olabilir ... (1) senaryoyu hangi işlem veya kullanıcı eylemi başlatacak? (2) komutunu doğrudan başlatmak yerine neden bir komut dosyası istiyorsun? (3) çıkışı günlüğe kaydetmeniz, terminalden ayrılmanız ve/veya komut için yeni bir işlem grubu başlatmanız gerekiyor mu? (4) diğer yorumlar? – NVRAM

cevap

24
#!/bin/sh 

your_cmd & 

echo "started your_cmd, now exiting!" 

Benzer yapılar Perl ve php için var, ancak sh/bash onun çok kolay arka planda başka komutunu çalıştırın ve devam etmek.

jenerik süreç manipülasyon için çok iyi bir kaynak /etc/init.d altındaki tüm başlangıç ​​betikleridir düzenlemek. Temel başlangıç ​​/ durdur/yeniden başlat komutlarını yürütmek gibi, her türlü düzgün hile yaparlar.

+0

Beni bununla ilgili bir şey yakaladı - yapamazsınız ... [$ var -eq 1] && your_cmd & ... çünkü ana işlem çalışmaya devam edecektir. – chrism1

+0

Kabuğun dışına çıktıktan sonra your_cmd'nin ölmesini engellemek için 'nohup' kullanmanız gerekebilir; camh'ın cevabına bakın. – reinierpost

4

&?

 
    #!/usr/bin/bash 
    # command1.sh: execute command2.sh and exit 
    command2.sh & 
+2

Kafasında dört boynuzlu dört boynuzlu tek boynuzlu at nasıl oldu? –

+2

Bu bir korna, ama bir gökkuşağının önünde duruyor. – mob

4

Bunun aradığınız buysa tamamen emin değilim, ama olabildiğince arka plan işareti komutunun son karakteri olarak (&) sembolü iliştirerek bir kabuk içinde yürütülen bir süreçtir.

b.sh & 
14

çalıştırmak için: Senaryoyu varsa

Yani, a.sh

ve a.sh şimdi etsen, senaryo b.sh yürütmek demek gibi ayrı işlem spawn gerekiyor arka planda bir komut, komut için '&' ekleyebilirsiniz.

Oturum açma oturumunuzu geçecek programa ihtiyacınız varsa, nohup'u kullanabilirsiniz. Madem Perl belirtildiği gibi how to run a command in the background ...

3

:

fork || exec "ls"; 

... "ls" hiç bir şey

bu benzer stackoverflow açıklamalara bakın. Ateşlemeniz gereken çok sayıda komut için tekrarlayın.

+0

Veya, sadece "exec" ls "; devam etmek için mevcut işleme gerek yok. Ve bu yaklaşımın avantajı, STDOUT çıkışının konsola gönderilmesini sağlamaktır (komut satırından komut yazmış olsaydınız). \ –

5

Bir komut çalıştırmanın ve çıkış yaptığınızda çalışmaya devam etmenin normal yolu nohup(1)'u kullanmaktır. nohup, verilen komutun kabuk çıktığı zaman HUP sinyalini almasını engeller. Ayrıca, ve işareti (&) komut sonekiyle arka planda çalışmanız gerekir.

$ nohup some_command arg1 arg2 &