Bagaimana cara membunuh proses dan subproses?

9

Saya mengajukan pertanyaan untuk mengetahui bagaimana cara mendapatkan beberapa baris pesan dari modul subproses Python.

Masalahnya adalah bahwa dalam proses pengujian, saya harus membunuh proses python yang menjalankan proses gnuchess. Menggunakan ^ c di baris perintah tampaknya membunuh proses python, tetapi bukan proses gnup.

Untuk membunuh gnuchess, saya mendapatkan pid dengan ps aux | grep gnuchess dan jalankan kill -9 PID . Apakah ada metode lain untuk membunuh proses python dan gnuchess?

prosseek
sumber
8
Sidenote acak: Anda dapat menggunakan pkilluntuk membunuh proses dengan nama, sehingga Anda ps aux | grep gnuchessdan kill -9 PIDhanya bisa menjadipkill -9 gnuchess
Michael Mrozek

Jawaban:

10

Ada metode standar, jika program bekerja sama. Jalankan di kill -- -42mana 42 adalah pid dari proses induk. Ini mengirimkan sinyal ke semua proses dalam kelompok proses yang dipimpin oleh proses 42 (tanda minus sebelum pid berarti kelompok proses).

Biasanya, jika Anda menjalankan skrip python Anda dari prompt shell dan itu hanya garpu gnuchess, dua proses harus tetap dalam kelompok proses yang sama. Tapi ini tampaknya tidak menjadi masalah, karena Ctrl+ Cmengirim SIGINTke seluruh grup proses latar depan.

Gnuchess mungkin berada dalam grup prosesnya sendiri karena ia menjadikan dirinya sendiri sebagai pemimpin sesi (tapi saya tidak tahu mengapa ia melakukan hal ini), atau karena Anda telah menggandakannya (python memotong sebuah shell yang bercabang gnuchess). Garpu ganda mungkin bisa dihindari, tetapi saya tidak bisa memberi tahu Anda caranya tanpa melihat kode Anda.


Cara yang cukup andal dan sesuai POSIX untuk menemukan pid dari gnuchessproses adalah

gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')

Varian unix tertentu mungkin memiliki cara yang lebih baik untuk mencapai ini, seperti pgrep.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Mencoba:

pkill <processname>
Kebingungan
sumber