Я думаю, что, возможно, я делал это неправильно какое-то время, потому что мы просто переключились на systemd, и он считает, что мой чисто убитый процесс закончился неудачно.Каким должен быть код выхода моей программы, если я поймаю сигнал?
В основном я слушаю для SIGHUP
, SIGINT
и SIGTERM
, а затем (путем передачи кода сигнала обратно до main
) чисто, например, return 128+SIGHUP
.
Я ожидал, что это будет использоваться для заполнения $?
, но теперь я думаю, я понимаю, что оболочка несет ответственность за то, что $?
такое значение, а затем только если сигнал был необработанным. Поэтому даже если процесс вышел из-за сигнала, потому что сигнал был обработан, $?
в конечном итоге будет 0
, и все доказательства того, что сигнал имеет какое-либо отношение к выходу, будут потеряны. Это правильно?
При обращении с SIGHUP
и чистом выходе, должен ли я return EXIT_SUCCESS
от main
?
Я думаю, это зависит. Если завершение сигналом считается успешным запуском двоичного файла, тогда да. Если эти сигналы указывают на ошибку, EXIT_FAILURE. – Hayt
@ Hayt: Итак, вытаскивание - это то, что я не должен делать _anything_, чтобы включить код сигнала в код выхода процесса в любом случае? –
Прекращается или вешается знак того, что ваша программа не справилась со своей задачей? – StoryTeller