Arka planda bir linux işlemi başlatma


10

Bazı programları başlatan bir komut dosyası oluşturmaya çalışıyorum

startup.sh

knetworkmanager
emesene
keepassx

Sorun betiği çalıştırdığımda, sadece knetworkmanager başlar olmasıdır. Çünkü onu başlatacak, sonra bitene kadar bekleyecek. Bir programı beklemeden nasıl başlatabilirim? Her komuttan sonra "&" ekleyebileceğimi sanmıyorum, çünkü komut dosyası tamamlandığında tüm işlemler yine de öldürülecek.

Yanıtlar:


16

Komut dosyasını çalıştıran kabuk çıktığında, başlattığınız işlemlere bir HUP sinyali gönderir. Eğer bunlar sinyali yakalamazsa, sonlandırılacaktır. Bu nedenle, & kullanmanın yeterli olup olmadığı uygulamaya bağlıdır. Güvende olmak için nohup'ı şu şekilde kullanın:

nohup your-program >>/dev/null 2>>/dev/null &

Nohup için man sayfalarına bakın ve daha fazla ayrıntı için öldürün veya nohup ile ilgili wikipedia makalesini okuyun .


Tekrar okumak, OP'nin çağrı kabuğundan çıkıp çıkmadığı konusunda belirsizdir. Sadece senaryodan çıkıp kabuktan ya da terminalden çıkmıyor.
Adam Bellaire

cevabımı tekrar okuduğumda, "komut dosyasını çalıştıran kabuk çıktığında" dediğimi fark edeceksiniz. Bu kabuğun kendi sanal terminali (alt kabuk veya başka bir şey değil) varsayarsak, bu doğrudur.
Kim

@Kim: Bu doğru. Cevabınız iyi, OP'nin çağrı kabuğunu kapatıp kapatmayacağından eminim.
Adam Bellaire

10

Hayır, komut dosyası kullanıldığında işlemler öldürülmemelidir &. Dene.

knetworkmanager &
emesene &
keepassx &

2

Verdiğiniz örnek programlara dayanarak, KDE başlatıldığında bazı programları başlatmaya çalıştığınız anlaşılıyor. Öyleyse, KDE'nin Otomatik Başlatma özelliğine bakın. Bu makalede daha fazla açıklanmakta ve otomatik başlatmaya nasıl program ekleneceği ile ilgili yönergeler verilmektedir.


Gerçekten de yapmaya çalıştığım şey bu. Şimdi düzelttim, teşekkürler.
Bart van Heukelom

1

Diğerlerinin söylediği gibi, &kabuğunu çalıştırdığı sırada arka plana bir komut koymak için operatörü kullanın.

Bileşen parçalarının sırayla çalışmasını istiyorsanız (aynı anda değil), ancak yine de bütünün arka plana sahip olmasını istiyorsanız, aşağıdaki gibi bir alt kabuk kullanın:

(knetworkmanager; emesene; keepassx) &

veya her bir parçanın çalışmasını önceki parça kullanımının başarılı bir şekilde tamamlanmasına bağlı olmak istiyorsanız:

(knetworkmanager && emesene && keepassx) &

0

Her komuttan sonra bir '&' eklemek kesinlikle işe yarayacaktır. Bu, komut dosyalarının veya programların startup.sh bittikten sonra bile çalışmaya devam edeceği anlamına gelir.


0

Başka bir seçenek de / sbin / start-stop-daemon kullanarak işlemi bir arka plan programı olarak başlatmak olabilir.

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.