Hem süreci hem de alt süreci nasıl öldürürüm?


9

Python'un alt işlem modülünden birden fazla mesaj satırını nasıl alacağımı öğrenmek için bir soru sordum .

Sorun şu ki, test sırasında gnuchess işlemini çalıştıran python işlemini öldürmek zorunda kaldım. Komut satırında ^ c kullanılması, python işlemini öldürüyor gibi görünüyor, ancak gnuprocess'i değil.

Gnuchess öldürmek için ps aux ile pid olsun | grep gnuchess ve kill -9 PID çalıştırın . Hem python hem de gnuchess işlemini öldürmek için başka yöntemler var mı?


8
Rastgele sidenote: pkillBir işlemi adıyla öldürmek için kullanabilirsiniz , böylece sizin ps aux | grep gnuchessve kill -9 PIDsadece olabilirsinizpkill -9 gnuchess
Michael Mrozek

Yanıtlar:


10

Programlar işbirliği yaparsa standart bir yöntem vardır. Run kill -- -4242 ebeveyn sürecinin pid olduğu. Bu , işlem 42 (pid'den önceki eksi işareti işlem grubu anlamına gelir) tarafından yönlendirilen işlem grubundaki tüm işlemlere bir sinyal gönderir .

Normalde, python komut dosyanızı bir kabuk isteminden çalıştırırsanız ve basitçe çatallarsa gnuchess, iki işlem aynı işlem grubunda kalmalıdır. Ancak durum böyle görünmüyor, çünkü Ctrl+ tüm ön plan süreç grubuna Cgönderiyor SIGINT.

Gnuchess kendi süreç grubunda olabilir, çünkü kendisini bir oturum lideri yaptı (ama bunu neden yapacağını bilmiyorum) ya da çift çatallı (python gnuchess'i çatallayan bir kabuk çatal). Çift çatal muhtemelen önlenebilir, ancak kodunuzu görmeden nasıl söyleyemem.


gnuchessSürecin pid'ini bulmanın makul ve güvenilir ve POSIX uyumlu bir yolu

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

Belirli unix varyantları bunu başarmak için daha iyi yollara sahip olabilir pgrep.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.