记录由于信号而退出的 Linux 进程?

记录由于信号而退出的 Linux 进程?

很久以前运行 FreeBSD 时,有一个默认功能,当进程收到致命信号(如 SIGSEGV、SIGBUS、SIGKILL 等)并因此终止时,它会进行记录。

Linux 上有类似的东西吗?

答案1

这个auditd建议很可靠,但请注意,只有在kill(2)调用系统调用时它才有效。 SIGBUS例如,不会调用该系统调用;它是内核内部的一个中断处理程序,然后将信号直接传播到相关进程,而无需系统调用接口。

为了完美地实现您的目标,您可能正在寻找 BPF。 是一个很好的资源,可以开始使用。猜测一下——没有明示或暗示的保证——你可能想要使用这里

答案2

如果你正在寻找发送到特定进程的信号,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)跟踪审计日志文件

# tail -f /var/log/audit/audit.log

相关内容