GNU/Linux >> Belajar Linux >  >> Linux

Proses Keturunan?

Saya mencoba membangun wadah proses. Wadah akan memicu program lain. Misalnya – skrip bash yang meluncurkan menjalankan tugas latar belakang dengan penggunaan '&'.

Fitur penting yang saya cari adalah ini:ketika saya membunuh wadah, semua yang telah muncul di bawahnya harus dibunuh. Bukan hanya anak langsung, tapi juga keturunannya.

Ketika saya memulai proyek ini, saya secara keliru percaya bahwa ketika Anda membunuh sebuah proses, anak-anaknya secara otomatis juga terbunuh. Saya telah meminta saran dari orang-orang yang memiliki ide yang salah yang sama. Meskipun mungkin untuk menangkap sinyal dan meneruskan pembunuhan itu kepada anak-anak, bukan itu yang saya cari di sini.

Saya percaya apa yang saya inginkan dapat dicapai, karena ketika Anda menutup xterm, apa pun yang berjalan di dalamnya akan terbunuh kecuali jika tidak. Ini termasuk proses yatim piatu. Itulah yang ingin saya ciptakan kembali.

Saya memiliki gagasan bahwa apa yang saya cari melibatkan sesi unix.

Jika ada cara yang dapat diandalkan untuk mengidentifikasi semua turunan dari suatu proses, akan berguna untuk dapat mengirimkan sinyal arbitrer juga kepada mereka. misalnya SIGUSR1.

Jawaban yang Diterima:

Jika Anda mengirim sinyal ke suatu proses, proses itu akan mati. Saya bertanya-tanya bagaimana rumor bahwa membunuh suatu proses juga membunuh proses lain dimulai, tampaknya sangat kontra-intuitif.

Namun, ada cara untuk membunuh lebih dari satu proses. Tetapi Anda tidak akan mengirim sinyal ke satu proses. Anda dapat mematikan seluruh grup proses dengan mengirimkan sinyal ke -1234 di mana 1234 adalah PGID (ID grup proses), yang merupakan PID dari pemimpin grup proses. Saat Anda menjalankan pipeline, seluruh pipeline dimulai sebagai grup proses (aplikasi dapat mengubahnya dengan memanggil setpgid atau setpgrp ).

Saat Anda memulai proses di latar belakang (foo & ), mereka berada dalam kelompok proses mereka sendiri. Grup proses digunakan untuk mengelola akses ke terminal; biasanya hanya grup proses latar depan yang memiliki akses ke terminal. Pekerjaan latar belakang tetap berada di sesi yang sama, tetapi tidak ada fasilitas untuk menghentikan seluruh sesi atau bahkan untuk menghitung grup proses atau proses dalam satu sesi, sehingga tidak banyak membantu.

Saat Anda menutup terminal, kernel mengirimkan sinyal SIGHUP untuk semua proses yang memilikinya sebagai terminal pengendali mereka. Proses ini membentuk sesi, tetapi tidak semua sesi memiliki terminal pengontrol. Untuk proyek Anda, satu kemungkinan adalah memulai semua proses di terminal mereka sendiri, dibuat oleh skrip, layar, dll. Matikan proses emulator terminal untuk mematikan proses yang ada (dengan asumsi mereka belum memisahkan diri dengan setsid ).

Terkait:Bagaimana cara mematikan proses menahan kunci apt?

Anda dapat memberikan lebih banyak isolasi dengan menjalankan proses sebagai pengguna mereka sendiri, yang tidak melakukan hal lain. Maka mudah untuk mematikan semua proses:jalankan kill (panggilan sistem atau utilitas) sebagai pengguna tersebut dan menggunakan -1 sebagai argumen PID untuk mematikan, yang berarti “semua proses pengguna tersebut”.

Anda dapat memberikan lebih banyak isolasi, tetapi dengan penyiapan yang jauh lebih banyak dengan menjalankan proses yang ada dalam wadah yang sebenarnya.


Linux
  1. bunuh Contoh Perintah di Linux

  2. Cara membunuh proses zombie

  3. Cara Menjeda/Melanjutkan Proses di Linux

  1. Membunuh proses di Raspbian

  2. Kapan saya tidak boleh membunuh -9 proses?

  3. Bunuh proses yang berjalan di port 80

  1. Cara mematikan proses zombie di Linux

  2. Linux – Kapan Saya Tidak Harus Membunuh -9 Proses?

  3. Bagaimana cara mematikan proses di Linux menggunakan perintah?