Давным-давно при запуске FreeBSD существовала функция по умолчанию, которая регистрировала, когда процесс получал один из фатальных сигналов, таких как SIGSEGV, SIGBUS, SIGKILL и т.д., и из-за этого был завершен.
Есть ли что-то подобное для Linux?
В auditd
предложение правильное, но учтите, что оно работает, только если kill(2)
syscall вызывается. SIGBUS
, например, не вызывает этот системный вызов; это обработчик прерывания внутри ядра, который затем передает сигнал непосредственно соответствующему процессу без необходимости в интерфейсе системных вызовов.
Для идеального достижения цели вы, вероятно, ищете BPF. это отличный ресурс для начала игры. Предположительно - без явных или подразумеваемых гарантий - вы можете захотеть Вот.
Если вы ищете сигналы, отправляемые определенному процессу, strace может быть всем, что вам нужно:
# strace -e trace=signal -p <pid>
Много информации доступно на странице руководства strace ...
Также есть пакет «auditd».
Этот пост на redhat.com адресован вашему конкретному вопросу: https://access.redhat.com/solutions/36278
Резюмируя из сообщения redhat:
1) Установите auditd
2) Отредактируйте /etc/audit/audit.rules, включив в него строку:
-a entry,always -F arch=b64 -S kill -k teste_kill
3) перезапустить службу auditd (или остановить / запустить)
# service auditd restart
4) следите за файлом журнала auditd
# tail -f /var/log/audit/audit.log