Mam skrypt bash (wywoływany z programu Java), który ciągle ginie. Zawsze łapię signal 15
za, trap
ale wtedy pojawia się jakiś inny sygnał, który, jak podejrzewam, jest signal 9
w zasadzie ślepy, czy tak naprawdę jest signal 9
.
Wiem, że nie możesz trap
signal 9
, więc czy jest jakiś inny sposób, aby stwierdzić, czy signal 9
zabija mój skrypt powłoki?
status
procesu potomnego za pośrednictwemwait(2)
lub coś takiego.-a entry,always -F arch=b64 -S kill -k kill_signals
Odpowiedzi:
Status wyjścia zabitego polecenia powinien być numerem sygnału plus 128. Możesz więc użyć statusu wyjścia, aby dowiedzieć się, który sygnał został zabity przez ciebie.
Testowałem to tak na Linuksie w powłoce:
EDYCJA: Zauważ, że program może zdecydować o zakończeniu z dowolną wartością¹ (więc musisz zdecydować, na ile ufasz statusowi wyjścia, aby był efektem sygnału):
Przypis 1: W moich systemach kody wyjścia są reprezentowane jako 8-bitowe liczby bez znaku, więc zawijają się przy 256 = 0.
źródło