GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Proses Pgid Anak Bukan Pid Orang Tua?

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?
Linux
  1. Membangun wadah dengan tangan:Ruang nama PID

  2. Mengapa Cd Bukan Program?

  3. Mengapa Dokumen Induk Shell Di Sini Tidak Berfungsi Untuk Sub-perintah Di Dash Tapi Bash Bekerja?

  1. Bagaimana menemukan semua proses anak?

  2. Secara terprogram dapatkan induk pid dari proses lain?

  3. Cara mendapatkan proses anak dari proses induk

  1. Proses Induk Baru Ketika Proses Induk Meninggal?

  2. Mengapa Sigint Tidak Dipropagasi ke Proses Anak Saat Dikirim ke Proses Induknya?

  3. Mengapa Garpu Mekanisme Pembuatan Proses Default?