Bas Zombiler


11

Bash zombi yaratmıyor gibi görünüyor. Görünüşe göre süreçler öldürüldüklerinde hemen toplanırlar.

Bash zombi yapabilir miyim?


Neden soruyorum:

Bir çocuk sürecini güvenli bir şekilde öldürmek veya kill -9belirli bir süre içinde ölmezse güvenli bir şekilde öldürmek istiyorum, ancak yanlışlıkla çocuk sürecim olmayan bir süreci zaplamak istemiyorum. Zombi süreçleri genellikle çok kolay ve yarış koşullarını güvende hale getirir.


1
Belki başka bir fikir ... gerçekten dış süreçleri öldürmekten korumak istiyorsanız, gruplara göz atın. unsharePID ad alanı oluşturmak için çağırın , böylece bu işlem ağacından dış işlemler izole edilir ve erişilemez olur.
orion

Atlatmaya çalışmak yerine, iş kontrolünü ( iş numarasının kill -KILL %nnerede nolduğu vb.) Kullanın .
Nominal Hayvan

Harika bir soru! Yine de "neden soruyorsunuz" için alternatif bir yaklaşım: timeoutkomutu düşündünüz mü?
Wildcard

Yanıtlar:


13

Bir zombi işlemi yapmak için:

$ (sleep 1 & exec /bin/sleep 10)

Bu sleep 1ile çalışan kabuk yerine işlemin sonlandığını /bin/sleep 10bilemez sleep 1, böylece 10 saniye boyunca bir zombi yaratır.


Bir zombi sürecini öldürmekten ne beklediğinden emin değilim. Bir zombi süreci zaten ölmüştü, onu öldüremezsin.

Aslında, zombi süreçlerinin kaybolmasını sağlayabilirsiniz, ancak ebeveynini öldürerek zombi süreçlerini kendileri değil.


Yeniden oluşturulan PID'ler geri dönüştürülür. Zombilerin amacı, ebeveyn çocuğunun ölümünü bekleyene kadar PID'leri ayırmalarıdır. Bu olmadan, bir pid öldürmek kazara bir kurbanla sonuçlanabilir.
PSkocik

1
C'de, çocuğunuzu öldürdüğünüzde kazara bir kurban yapmayacağınızdan emin olabilirsiniz, çünkü o çocuğu beklemeden o çocuğun PID'si geri dönüştürülemez. Kabukta da aynı garantiye sahip olmak istiyorum.
PSkocik

3

Çok ilginç bir cevap değil:

$ (A=$BASHPID && ( kill -STOP $A ))

[1]+  Stopped                 ( A=$BASHPID && ( kill -STOP $A ) )

$ ps -C bash
  PID TTY          TIME CMD
29453 pts/0    00:00:00 bash
29593 pts/0    00:00:00 bash
29594 pts/0    00:00:00 bash <defunct>

Bu nasıl bir zombi süreci? Sadece durdu. Ayrıca $BASHPIDolduğunu $$düşünüyorum.
Gabor Csardi

$BASHPID olduğunu değil aynı $$. Kod aşağıdaki deneyin: echo $$ $BASHPID ;echo $(echo $$ $BASHPID). İçinde daha fazla bilgi bulabilirsiniz man bash.
Alex Baranowski
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.