GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membuat proses anak mati setelah orang tua keluar?

Anak dapat meminta kernel untuk mengirimkan SIGHUP (atau sinyal lain) ketika orang tua meninggal dengan menentukan opsi PR_SET_PDEATHSIG di prctl() syscall seperti ini:

prctl(PR_SET_PDEATHSIG, SIGHUP);

Lihat man 2 prctl untuk detailnya.

Sunting:Ini hanya untuk Linux


Saya telah mencapai ini di masa lalu dengan menjalankan kode "asli" di "anak" dan kode "memunculkan" di "induk" (yaitu:Anda membalikkan pengertian tes yang biasa setelah fork() ). Kemudian jebak SIGCHLD dalam kode "yang dimunculkan"...

Mungkin tidak mungkin dalam kasus Anda, tetapi lucu jika berhasil.


Saya mencoba memecahkan masalah yang sama, dan karena program saya harus berjalan di OS X, solusi khusus Linux tidak bekerja untuk saya.

Saya sampai pada kesimpulan yang sama dengan orang lain di halaman ini -- tidak ada cara yang kompatibel dengan POSIX untuk memberi tahu seorang anak ketika orang tuanya meninggal. Jadi saya membuat hal terbaik berikutnya -- mengadakan jajak pendapat anak.

Ketika proses induk mati (karena alasan apa pun) proses induk anak menjadi proses 1. Jika anak hanya memilih secara berkala, ia dapat memeriksa apakah induknya adalah 1. Jika ya, anak harus keluar.

Ini tidak bagus, tetapi berhasil, dan lebih mudah daripada solusi pemungutan suara soket/lockfile TCP yang disarankan di tempat lain di halaman ini.


Linux
  1. Bagaimana Membunuh Proses Yang Induknya Init?

  2. Linux – Bagaimana Membuat Proses Tidak Terlihat oleh Pengguna Lain?

  3. Bagaimana cara mengatur direktori kerja dari proses induk?

  1. Bagaimana cara melacak proses anak menggunakan strace?

  2. Proses anak menerima SIGINT orang tua

  3. Mengapa proses anak masih hidup setelah proses induk dimatikan di Linux?

  1. Ssh – Bagaimana Cara Membuat Proses yang Saya Mulai Selama Sesi Ssh Berjalan Setelah Sesi Berakhir??

  2. Bagaimana cara memotong proses yang tidak mati saat shell keluar?

  3. Bagaimana cara membuat antarmuka tap tetap ada setelah reboot?