Yeniden başlamaya devam eden bir işlemi öldür


16

'Kill -9' çalışmazsa ne olur? veya Yeni süreçler başlatan bir script nasıl öldürülür? bana yardım etmiyor zaten.

Bir python komut var Başka bir işlem kimliği ile otomatik olarak başlar aynı bağlantı noktasını kullanarak öldürüldüğünde kullanarak 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)

Bu bir Zombi süreci değil.

$ 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

Ben bile sudo pkill -f <processname>şanssız denedim . Ölmek istemiyor.

Güncelleme:

Üst süreci, shüst sudotabloda yukarıdaki tabloda belirtildiği gibidir. Bunları aniden öldürmenin güvenli olup olmadığından emin değilim. Ayrıca bu paylaşılan bir ubuntu sunucusudur.


Görünüşe göre gayet iyi ölüyor. Sizin lsofçıkış gösterileri yeni her seferinde pid. İşlem basitçe yeniden başlıyor.
Patrick

Evet sonsuza kadar ölmek istemiyor. Hiç ölmemiş gibi uyanır :(
Lakshminarayanan Guptha

Yanıtlar:


26

Başka bir işlem kimliğiyle otomatik olarak başlar, farklı bir işlem olduğu anlamına gelir. Böylece, çocuklarını izleyen bir ebeveyn süreci vardır ve eğer ölürse ebeveyn tarafından yeniden doğar. Hizmeti tamamen durdurmak istiyorsanız, ana işlemi nasıl durduracağınızı öğrenin. İle Killing SIGKILLseçeneklerden tabii birinin olmakla muhtemelen Sağ Bir TM , hizmet monitör düzgün kapatmaya bazı temizlik yapmak gerekebilir çünkü.

Monitör sürecini bulmak için, tüm dinleyici listesini incelemeniz gerekebilir, çünkü gerçek dinleyiciler kendilerini ebeveynlerinden ayırabilirler (genellikle fork() + setsid()kombo tarafından ). Bu durumda, ps faux( procpsen azından diğer uygulamalar için farklı olabilir) çıktısını oldukça kullanışlı buluyorum - hiyerarşik bir ağaçtaki tüm işlemleri listeler. Bir PID sarması olmadığı sürece (ayrıca bkz. Wikipedia ), monitör PID'si dinleyicilerin herhangi birinin PID'sinden daha küçük olmalıdır (elbette bir PID sarmalamasına çarpmadığınız sürece).


Onun ebeveyni, shebeveyni sudo. Onları öldürmek uygun mudur?
Lakshminarayanan Guptha

Hangi sürecin üst öğesi? 3002 numaralı limanda dinleyen mi? Bu durumda tüm işlemleri listeleyin ve hangisinin monitör olduğunu tahmin edin. Linux ile procpsgenellikle çıktıların ps -fauxyeterince bilgilendirici olduğunu düşünüyorum. Ayrıca, monitörün PID'sinin gerçek dinleyicinin PID'sinden daha küçük olması gerektiğini unutmayın (sistemi bir süredir açmadıysanız ve hizmet başlatıldığından beri PID'ler zaten sarılmış değilse).
peterph

Harika. ps -fauxebeveynden öldürmeye başlamasına yardım etti. Cevabınızı yorumdaki çözümle güncelleyebilir misiniz?
Lakshminarayanan Guptha

Evet, bunu düşünüyordum ... :)
peterph

ps fauxsupervisordhangi sonsuz tekrar başlatıldı tespit yardımcı oldu Laravel kuyruk daemon
kapatıldı

4

Eğer sürecin dinleme portunu biliyorsanız, kullanabilirsiniz fuserile -kbayrak.

Gibi bir şey,

fuser -k 3002/tcp
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.