GNU/Linux >> Belajar Linux >  >> Linux

Daemonisasi proses di shell?

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.


Linux
  1. Proses Keturunan?

  2. Sejarah Hancur?

  3. Mengapa "ls" Membutuhkan Proses Terpisah Untuk Dieksekusi?

  1. Jalankan skrip php sebagai proses daemon

  2. Adakah cara untuk menjalankan perintah Shell di Android secara terprogram?

  3. Mendapatkan PID dari proses di Shell Script

  1. Bagaimana cara mendapatkan kode keluar dari proses pemijahan di skrip Shell yang diharapkan?

  2. Mengapa menjalankan perintah shell Linux dengan '&'?

  3. Apakah mungkin proses daemon (yaitu latar belakang) untuk mencari penekanan tombol dari keyboard USB?