http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/ memberikan contoh proses daemonisasi suatu proses dalam bash:
$ nohup firefox& &> /dev/null
Jika saya benar, perintahnya sama dengan "nohup dan background a process". Tetapi bukankah daemon lebih dari sekadar proses nohupped dan background?
Langkah-langkah apa yang hilang di sini untuk daemonisasi suatu proses?
Misalnya, bukankah mengubah proses induk diperlukan saat melakukan daemonisasi suatu proses? Jika ya, bagaimana Anda melakukannya di bash? Saya masih mencoba memahami balasan terkait https://unix.stackexchange.com/a/177361/674 .
Apa langkah dan ketentuan lainnya?
Lihat pertanyaan terkait saya https://stackoverflow.com/q/35705451/156458
start-stop-daemon
di Debian; Saya akan meninggalkan di sini utas terkait dari stack overflow stackoverflow.com/questions/16139940/... yang lebih menarik daripada halaman mentahJawaban:
Dari artikel Wikipedia tentang daemon :
Dalam lingkungan Unix, proses induk daemon sering, tetapi tidak selalu, proses init. Daemon biasanya dibuat oleh proses yang memproses proses anak dan kemudian segera keluar, sehingga menyebabkan init untuk mengadopsi proses anak, atau dengan proses init secara langsung meluncurkan daemon. Selain itu, daemon yang diluncurkan oleh forking dan exiting biasanya harus melakukan operasi lain, seperti memisahkan proses dari terminal pengendali (tty). Prosedur seperti itu sering diimplementasikan dalam berbagai rutinitas kenyamanan seperti daemon (3) di Unix.
Baca halaman manual
daemon
fungsi.Menjalankan perintah latar belakang dari shell yang segera keluar hasil dalam proses PPID menjadi 1. Mudah untuk menguji:
Seperti yang Anda lihat, proses tersebut dimiliki oleh PID 1, tetapi masih terkait dengan TTY. Jika saya keluar dari shell login ini, kemudian login lagi, dan lakukan
ps
lagi, TTY menjadi?
.Baca di sini mengapa penting untuk melepaskan diri dari TTY .
Menggunakan
setsid
(bagian dariutil-linux
):Saya pikir Anda bahkan tidak perlu mengarahkan stdin, stdout dan stderr.
sumber
bash -c
pembungkus, tidak ada TTY yang terkait dengan proses. Ini seperti dia menunjukkannya.echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'
akan menunjukkan kepada Anda bahwa itu adalah TTY yang sama persis untuk keduanya, tetapi perilaku yang ditunjukkan untuk mendapatkan TTY?
masih terjadi meskipun Anda tidak pernah "keluar dari shell" atau menutup TTY.Deamon, dengan namanya tidak lebih dari program yang berjalan sampai 1. sistem dimatikan; 2. diminta untuk berhenti. Selain itu, ia tidak memiliki makna sihir.
Dalam keadaan tersebut, menjalankan skrip bash di latar belakang dengan nohup, dapat mengklasifikasikannya sebagai proses daemon.
Apa yang Anda harapkan untuk ditemukan dan tidak ditemukan? Jika Anda mengalami masalah, sebutkan kode sampel dan segmen data sampel untuk meminta bantuan lebih lanjut. Pertanyaan Anda, seperti yang ada sekarang terlalu luas / umum.
sumber