Bagaimana saya bisa membunuh proses induk saja?

10

Saya memiliki proses berikut.

Proses Parent
- Proses Anak
- Proses Anak
- Proses Anak

Bagaimana saya bisa membunuh proses induk saja? Saya ingin anak-anak memproses untuk tidak dibunuh. Jika saya mencoba untuk membunuh proses orang tua, anak-anak akan mendapatkan SIGHUP dan akan terbunuh.

kcm1700
sumber
5
Apakah definisi proses anak yang terkait dengan orang tua itu?
Brad Patton
umh, mungkin iya. Itu terikat pada induknya.
kcm1700

Jawaban:

8

Secara umum, ketika suatu proses menjadi yatim piatu (yaitu, orang tuanya mati) ia diadopsi oleh init.

Situasi khusus yang Anda gambarkan mungkin berlaku untuk proses interaktif ketika terminal pengontrolnya ditutup (dari Wikipedia ):

Sinyal SIGHUP dikirim ke proses ketika terminal pengendali ditutup. Awalnya dirancang untuk memberi tahu proses penurunan garis serial. Dalam sistem modern, sinyal ini biasanya berarti bahwa mengendalikan terminal semu atau virtual telah ditutup.

Untuk mencegah hal ini, proses anak harus memblokir SIGHUP, jadi dalam kebanyakan kasus Anda membutuhkan kerja sama dari proses induk.

Jika proses induknya adalah shell ( bash, cshdan sejenisnya) dan Anda ingin perintah yang Anda jalankan tidak berakhir ketika bash selesai, Anda bisa mengawali setiap perintah dengan nohup(dari info coreutils "nohup invocation"):

'nohup' menjalankan PERINTAH yang diberikan dengan sinyal hangup diabaikan, sehingga perintah dapat terus berjalan di latar belakang setelah Anda logout.

Dalam contoh ini:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

findtidak akan terbunuh ketika shell mengakhiri dan menutup terminal pengendali /dev/ttys000.

Jika skrip shell harus memblokir SIGHUP, gunakan builtin trap, seperti yang dijelaskan di sini untuk bash.

Jaume
sumber
1
Saya sudah membuka proses tanpa nohup, ada saran?
kcm1700
Sejauh yang saya tahu Anda tidak bisa berbuat banyak. Setelah proses berjalan, Anda tidak dapat mengubah cara mereka bereaksi terhadap sinyal.
jaume
1
Bagaimana saya menempatkan proses yang sudah berjalan di bawah nohup? stackoverflow.com/questions/625409/…
PeterVermont