एक मारे गए कमांड की निकास स्थिति सिग्नल संख्या प्लस 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 पर लपेटें।
status
माध्यम सेwait(2)
या कुछ के माध्यम से बच्चे की प्रक्रिया तक पहुंच होनी चाहिए ।