क्या यह बताने का कोई तरीका है कि क्या संकेत 9 के साथ एक शेल स्क्रिप्ट को मार दिया गया था


15

मेरे पास एक बैश स्क्रिप्ट है (जिसे जावा प्रोग्राम से बुलाया गया है) जो मारती रहती है। मैं हमेशा signal 15साथ पकड़ता हूं trapलेकिन फिर कुछ अन्य संकेत आते हैं कि मुझे संदेह है signal 9लेकिन मैं मूल रूप से अंधा हूं जैसे कि यह वास्तव में है signal 9

मुझे पता है कि आप नहीं कर सकते trap signal 9, तो क्या कोई और तरीका है जो मैं बता सकता हूं कि signal 9क्या मेरी शेल स्क्रिप्ट को मार रहा है?


4
शेल स्क्रिप्ट क्या चल रही है? उस प्रक्रिया के statusमाध्यम से wait(2)या कुछ के माध्यम से बच्चे की प्रक्रिया तक पहुंच होनी चाहिए ।
thrig

एक जावा प्रोग्राम जो एक डेमॉन के रूप में चल रहा है, जो ऊपर से शुरू हुआ है, शेल स्क्रिप्ट प्रक्रिया चला रहा है
jgr208

1
आप कार्यक्रम को रोक सकते हैं और एक लाइन की तलाश कर सकते हैं जो कहती है कि "सिगली द्वारा मार दिया गया" या कुछ -a entry,always -F arch=b64 -S kill -k kill_signals
ऑडिट के

जवाबों:


21

एक मारे गए कमांड की निकास स्थिति सिग्नल संख्या प्लस 128 होनी चाहिए। इसलिए आप यह पता लगाने के लिए निकास स्थिति का उपयोग कर सकते हैं कि किस सिग्नल ने आपको प्रक्रिया को मार दिया।

मैंने इसे शेल में लिनक्स पर इस तरह से परीक्षण किया:

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

संपादित करें: ध्यान दें कि कोई भी प्रोग्राम किसी भी मान से बाहर निकलने का निर्णय ले सकता है (इसलिए आपको यह तय करना होगा कि आप सिग्नल के प्रभाव से बाहर निकलने की स्थिति पर कितना भरोसा करते हैं):

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

फुटनोट 1: मेरे सिस्टम से बाहर निकलने के कोड को अहस्ताक्षरित 8-बिट संख्याओं के रूप में दर्शाया जाता है ताकि वे 256 = 0 पर लपेटें।


1
ध्यान दें कि यह केवल संकेत 9 के लिए विश्वसनीय है जो फंस नहीं सकता है। अन्य संकेतों को प्रोग्राम द्वारा फँसाया जा सकता है जो तब किसी भी मूल्य के साथ बाहर निकल सकते हैं।
GnP

हां, जैसा कि जीएनपी ने बताया, किल -9 नहीं फंसाया जा सकता है
c4f4t0r

क्या आपके पास कोई स्रोत है?
बीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.