Jadi saya terus membaca di mana-mana bahwa perintah ini harus menghentikan semua proses anak dari proses induk:
kill -- -$$
Menggunakan ID negatif dengan perintah kill mereferensikan PGID dan dari contoh yang saya lihat tampaknya PGID dari proses anak harus menjadi PID induk tetapi tidak demikian halnya di sistem saya.
Di sistem saya, PGID anak sama dengan PGID skrip induk yang ternyata bash.
Apa yang terjadi di sini? Apakah contohnya salah atau sistem saya diatur berbeda?
Yang perlu saya capai adalah menghentikan proses anak tanpa menghentikan induk sehingga saya tidak ingin mengirim sinyal mematikan ke PGID tempat induk berada.
Jawaban yang Diterima:
Ketika sebuah proses bercabang, ia mewarisi PGID-nya dari induknya. PGID berubah ketika suatu proses menjadi pemimpin grup proses , maka PGID-nya disalin dari PID-nya. Sejak saat itu, anak baru memprosesnya, dan keturunan mereka, mewarisi PGID itu (kecuali mereka memulai grup proses baru mereka sendiri).
Dalam shell dengan kontrol pekerjaan, seperti kebanyakan shell interaktif, setiap pekerjaan ditempatkan dalam grup prosesnya sendiri. Jika Anda menjalankan skrip shell, proses shell yang menjalankan skrip akan menjadi pemimpin grup, dan PGID akan sama dengan PID-nya.
Dalam shell tanpa kontrol pekerjaan, seperti kebanyakan shell yang digunakan untuk menjalankan skrip, perintah dijalankan di grup proses shell.
Sintaks kill -- -N
membunuh semua proses dalam grup dengan PGID =N. Anda tidak dapat menggunakannya dengan PID sewenang-wenang, hanya PID pemimpin grup proses, karena itulah PGID. Ini pada dasarnya bagaimana shell
kill %jobid
sintaks berfungsi — secara internal menerjemahkan %jobid
ke PGID pekerjaan dan mengirimkan sinyal ke PGID itu.
Tidak ada cara sederhana untuk menjalankan skrip dalam grup prosesnya sendiri dari skrip shell lain. Lihat Cara mengatur grup proses skrip shell untuk beberapa saran.
Terkait:Pindahkan file dari beberapa folder semua ke direktori induk dengan command prompt?