Bir kabuk betiğinin sinyal 9 ile öldürülüp öldürülmediğini anlamanın bir yolu var mı


14

Ben öldürülmeye devam bir bash betiği (bir java programından denir) var. Hep yakalamak signal 15ile trapama sonra başka bir sinyal Ben şüpheli olduğunu ortaya çıkınca signal 9ama gerçekten ise temelde olarak kör içindeyim signal 9.

Yapamayacağınızı biliyorum trap signal 9, bu yüzden signal 9kabuk betiğimi öldürüp öldürmediğini anlamanın başka bir yolu var mı?


4
Kabuk betiğini çalıştıran nedir? Bu süreç statusalt süreçten wait(2)veya başka bir şeyle erişebilmelidir .
17'de thrig


1
Programı zorlayabilir ve "SIGKILL tarafından öldürüldü" yazan bir satır arayabilir veya şu konularda bir denetim çalışması yapabilirsiniz-a entry,always -F arch=b64 -S kill -k kill_signals
Bratchley

Yanıtlar:


20

Bir öldürülen komutun çıkış durumu, sinyal numarası artı 128 olmalıdır. Böylece, hangi durumu öldürdüğünüzü bulmak için çıkış durumunu kullanabilirsiniz.

Kabuktaki Linux'ta böyle test ettim:

print_exit_status_for_signal () {
  (
    sleep 1000
    echo Exit staus $? = signal $(( $? - 128 ))
  ) &
  sleep 1
  killall "${1:+-$1}" sleep
}
print_exit_status_for_signal
print_exit_status_for_signal 15
print_exit_status_for_signal 9
print_exit_status_for_signal KILL
print_exit_status_for_signal TERM

DÜZENLEME: Bir programın herhangi bir değerle çıkmaya karar verebileceğini unutmayın (bu nedenle bir sinyalin etkisi olarak çıkış durumuna ne kadar güvendiğinize karar vermeniz gerekir):

for i in $(seq 256); do
  sh -c "exit $i"
  echo Program exited with $?
done

Dipnot 1: Sistemlerimde çıkış kodları işaretsiz 8 bitlik sayılarla temsil edilir, böylece 256 = 0 değerinde kaydırılırlar.


1
Bunun sadece yakalanamayan sinyal 9 için güvenilir olduğuna dikkat edin. Diğer sinyaller program tarafından yakalanabilir ve daha sonra herhangi bir değerle çıkabilir.
GnP

evet, gnp'in söylediği gibi, öldürme -9
tuzağa düşürülemez

Kaynakların var mı?
18'de
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.