Matikan proses yang terus memulai ulang

16

Bagaimana jika 'kill -9' tidak berfungsi? atau Bagaimana cara membunuh skrip yang memulai proses baru? bagaimanapun juga tidak membantu saya.

Saya memiliki skrip python yang dimulai secara otomatis dengan proses lain id menggunakan port yang sama ketika dibunuh menggunakan sudo kill -9 <pid>.

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

Ini bukan proses Zombie.

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

Saya bahkan telah mencoba sudo pkill -f <processname>tanpa hasil. Itu tidak ingin mati.

Memperbarui:

Proses shinduknya adalah induknya sudoseperti yang disebutkan dalam tabel di atas. Saya tidak yakin apakah aman untuk membunuh ini dengan tiba-tiba. Juga ini adalah server ubuntu bersama.

Lakshminarayanan Guptha
sumber
Sepertinya sedang sekarat saja. lsofOutput Anda menunjukkan pid baru setiap saat. Prosesnya hanya me-restart.
Patrick
Ya itu tidak ingin mati selamanya. Bangun seperti itu tidak pernah mati :(
Lakshminarayanan Guptha

Jawaban:

26

Mulai secara otomatis dengan ID proses lain berarti prosesnya berbeda. Jadi ada proses orang tua, yang memonitor anak-anaknya, dan jika ada yang meninggal, itu akan dihargai oleh orang tua. Jika Anda ingin menghentikan layanan sepenuhnya, cari tahu cara menghentikan proses induk. Membunuh dengan SIGKILLtentu saja salah satu opsi, tetapi mungkin bukan The Right One TM , karena monitor layanan mungkin perlu melakukan pembersihan untuk mematikan dengan benar.

Untuk menemukan proses monitor, Anda mungkin perlu memeriksa seluruh daftar proses, karena pendengar yang sebenarnya mungkin memisahkan diri dari orang tua mereka (biasanya oleh fork() + setsid()kombo). Dalam hal ini, saya menemukan output ps faux(dari procpssetidaknya, mungkin bervariasi untuk implementasi lain) agak mudah - ini mencantumkan semua proses dalam hierarki pohon. Kecuali jika ada bungkus PID (lihat juga wikipedia ), PID monitor harus lebih kecil dari PID pendengar mana pun (kecuali tentu saja Anda menekan bungkus-PID).

peterph
sumber
Induknya adalah shinduknya sudo. Apakah boleh membunuh mereka?
Lakshminarayanan Guptha
Induk proses yang mana? Yang mendengarkan pada port 3002? Dalam hal ini daftarkan semua proses dan tebak yang mana adalah monitor. Dengan linux procps, saya biasanya menemukan output ps -fauxmenjadi cukup informatif. Juga perhatikan, bahwa PID monitor harus lebih kecil dari PID pendengar yang sebenarnya (kecuali Anda memiliki sistem untuk beberapa waktu dan PID sudah dibungkus karena layanan sudah dimulai tentu saja).
peterph
Bagus. ps -fauxmembantu mulai membunuh dari orang tua. Bisakah Anda memperbarui jawaban Anda dengan solusi dari komentar?
Lakshminarayanan Guptha
Ya, saya memikirkannya ... :)
peterph
ps fauxmembantu mendeteksi supervisordyang tanpa henti
me-
4

Jika Anda tahu port mendengarkan proses, Anda dapat menggunakan fuserdengan -kflag.

Sesuatu seperti,

fuser -k 3002/tcp
Ramesh
sumber