Memulai proses linux di latar belakang

10

Saya mencoba membuat skrip yang memulai beberapa program

startup.sh

knetworkmanager
emesene
keepassx

Masalahnya adalah bahwa ketika saya menjalankan skrip, itu hanya memulai knetworkmanager. Ini karena itu akan memulainya, lalu tunggu sampai selesai. Bagaimana saya bisa memulai program tanpa menunggu? Saya tidak berpikir saya bisa menambahkan "&" setelah setiap perintah, karena semua proses akan tetap terbunuh ketika skrip selesai.

Bart van Heukelom
sumber

Jawaban:

16

Ketika shell yang menjalankan skrip keluar, ia mengirimkan sinyal HUP ke proses yang Anda mulai. Jika mereka tidak menangkap sinyal, mereka akan berhenti. Jadi apakah hanya menggunakan & cukup tergantung pada aplikasi. Agar aman, gunakan nohup seperti itu:

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

Lihat halaman manual untuk nohup dan bunuh untuk detail lebih lanjut atau baca artikel wikipedia tentang nohup .

Kim
sumber
Membaca lagi, ambigu apakah OP keluar dari shell panggilan atau tidak. Dia hanya menyebutkan keluar dari skrip, tidak keluar dari shell atau terminal.
Adam Bellaire
membaca jawaban saya lagi, Anda akan melihat bahwa saya mengatakan "ketika shell yang menjalankan skrip keluar". Dengan asumsi shell ini memiliki terminal virtual sendiri (bukan subkulit atau sesuatu) ini benar.
Kim
@ Kim: Itu benar. Jawaban Anda baik-baik saja, saya yakin jika OP menutup shell panggilan atau tidak.
Adam Bellaire
10

Tidak, proses tidak boleh dibunuh saat skrip selesai jika Anda menggunakan &. Cobalah.

knetworkmanager &
emesene &
keepassx &
Adam Bellaire
sumber
2

Berdasarkan contoh program yang Anda berikan, sepertinya Anda mencoba memulai beberapa program ketika KDE diluncurkan. Jika demikian, lihat fitur Autostart KDE. Artikel ini membahas lebih banyak dan memberikan instruksi tentang cara menambahkan program ke autostart.

Doug Harris
sumber
Memang, itulah yang saya coba lakukan. Saya memperbaikinya sekarang, terima kasih.
Bart van Heukelom
1

Seperti yang orang lain katakan, gunakan &operator untuk menempatkan perintah ke latar belakang pada saat shell menjalankannya.

Jika Anda ingin agar komponen dijalankan secara berurutan (daripada secara bersamaan), tetapi tetap ingin keseluruhannya menjadi berlatar belakang, gunakan sub-shell seperti ini:

(knetworkmanager; emesene; keepassx) &

atau, jika Anda ingin operasi masing-masing bagian bergantung pada keberhasilan penyelesaian bagian sebelumnya gunakan:

(knetworkmanager && emesene && keepassx) &
dmckee --- mantan kucing moderator
sumber
0

Menambahkan tanda '&' setelah setiap perintah pasti akan berfungsi. Ini berarti skrip atau program tersebut akan terus berjalan bahkan setelah startup.sh selesai.


sumber
0

Opsi lain adalah memulai proses sebagai daemon, menggunakan / sbin / start-stop-daemon

Abhinav
sumber