Рассмотрим эти две программы на 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?