Dari artikel Wikipedia tentang daemon:
Dalam lingkungan Unix, proses induk daemon seringkali, tetapi tidak selalu, proses init. Daemon biasanya dibuat oleh proses yang mem-forking proses anak dan kemudian segera keluar, sehingga menyebabkan init mengadopsi proses anak, atau dengan proses init yang langsung meluncurkan daemon. Selain itu, daemon yang diluncurkan dengan forking dan exit biasanya harus melakukan operasi lain, seperti memisahkan proses dari terminal pengontrol (tty). Prosedur tersebut sering diimplementasikan dalam berbagai kemudahan rutin seperti daemon(3) di Unix.
Baca halaman manual dari daemon
fungsi.
Menjalankan perintah latar belakang dari shell yang langsung keluar menghasilkan PPID proses menjadi 1. Mudah untuk diuji:
# bash -c 'nohup sleep 10000 &>/dev/null & jobs -p %1'
1936
# ps -p 1936
PID PPID PGID WINPID TTY UID STIME COMMAND
1936 1 9104 9552 cons0 1009 17:28:12 /usr/bin/sleep
Seperti yang Anda lihat, prosesnya dimiliki oleh PID 1, tetapi masih terkait dengan TTY. Jika saya logout dari shell login ini, login lagi, dan lakukan ps
sekali lagi, TTY menjadi ?
.
Baca di sini mengapa penting untuk melepaskan dari TTY.
Menggunakan setsid
(bagian dari util-linux
):
# bash -c 'cd /; setsid sleep 10000 </dev/null &>/dev/null & jobs -p %1'
9864
# ps -p 9864
PID PPID PGID WINPID TTY UID STIME COMMAND
9864 1 9864 6632 ? 1009 17:40:35 /usr/bin/sleep
Saya rasa Anda bahkan tidak perlu mengarahkan ulang stdin, stdout, dan stderr.