Определите, был ли процесс убит сигналом в bash - PullRequest
0 голосов
/ 01 ноября 2018

Рассмотрим эти две программы на C:

#include <signal.h>

int main(void) {
    raise(SIGTERM);
}
int main(void) {
    return 143;
}

Если я запусту любой из них, значение $? в bash будет 143. Системный вызов wait позволяет вам различать их, хотя:

wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGTERM}], 0, NULL) = 11148
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 143}], 0, NULL) = 11214

И bash явно использует это знание, поскольку первое приводит к тому, что Terminated выводится на терминал (как ни странно, это происходит, даже если я перенаправляю как stdout, так и stderr в другое место), а второе - нет. Как я могу отличить эти два случая от сценария bash?

...