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?
pkill
untuk membunuh proses dengan nama, sehingga Andaps aux | grep gnuchess
dankill -9 PID
hanya bisa menjadipkill -9 gnuchess
Jawaban:
Ada metode standar, jika program bekerja sama. Jalankan di
kill -- -42
mana 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+ CmengirimSIGINT
ke 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
gnuchess
proses adalahVarian unix tertentu mungkin memiliki cara yang lebih baik untuk mencapai ini, seperti
pgrep
.sumber
Mencoba:
sumber