Saya sedang membantu seorang kolega yang mengalami masalah dengan proses latar belakang yang sebentar-sebentar sekarat.
Saya menemukan bahwa mereka memulai proses latar belakang dengan masuk ke server dan menjalankan:
su - <user> -c '<command>' &
"Aha", seruku. "Jika Anda memulai perintah dengan" & "itu akan hang-up ketika Anda keluar dari terminal pengendali. Anda perlu menggunakan sesuatu seperti nohup untuk mencapai ini. Sungguh proses ini perlu mendukung berjalan sebagai daemon, tut tut."
Kami menguji perintah di atas untuk menunjukkan maksud saya dan ... sepertinya berhasil: proses yang dimulai dengan perintah tidak keluar ketika kami keluar dari terminal yang menjalankan perintah di atas.
perintah adalah skrip Python khusus yang hasilnya dikirim ke file. Sejauh yang saya tahu, tidak ada kemampuan "daemonize" cerdas dalam skrip. Itu tidak melakukan hal-hal yang diperlukan untuk dijalankan sebagai daemon yang terdaftar di Wikipedia: Daemon (komputasi): halaman Pembuatan .
Menjalankan perintah seperti itu berlaku seperti yang diharapkan:
<command> &
exit
Dalam kasus di atas proses latar belakang dimulai dengan perintah keluar ketika kita keluar dari terminal.
Pertanyaan saya adalah ini:
Apa yang terjadi ketika kita menambahkan "su - -c &" yang mencegah proses keluar saat terminal kita keluar. Saya ingin memahami secara detail sehubungan dengan terminal pengendali, input dan output standar dll.
Apakah ini cara yang masuk akal untuk mencapai tujuan menjalankan perintah ini sebagai proses latar belakang. Jika tidak mengapa, bukan?
Saya ingin menyebarkan praktik terbaik dalam perusahaan saya, tetapi saya harus dapat menunjukkan dan mendukung semua rekomendasi yang saya buat.
Saya juga ingin mengerti apa yang sebenarnya terjadi.
sumber
chroot --userspec root:root / sh -c "exec some_forever_process" &
. Pekerjaan berjalan sebagai pengguna yang sama, tanpa eksplisitnohup
sebelum ataudisown
sesudahnya. Jadi untuk kasus ini, bagaimana caranya sinyal tidak dapat dikirim pada saat term term?some_forever_process
dimaksudkan untuk berjalan selamanya (daemon) dan karenanya melindungi dirinya sendiri dari menerima SIGHUP dari terminal keluar (dengan menjalankan grup prosesnya sendiri).