Program terminated with signal SIGKILL,Killed 问题解决方法

最近发现一个奇怪的问题,程序运行一段时间后会被杀死。
通过gdb调试发现程序收到的信号是“Program terminated with signal SIGKILL,Killed”。
百度一番,有说是程序内存占用过多导致的,通过top -p 进程pid的方法进行检测,发现程序内存占用很低,只能是其他原因了。

最后搜到工具audit可以监控程序被kill的原因,执行命令如下。

1.先查看audit程序是否起来了
ps aux | grep audit
2.程序起来之后,加入监控进程被杀死的规则
auditctl -a exit,always -S kill
3.想监控具体进程可以用如下命令:
auditctl -a exit,always -S kill -F a0=0x6e9 其中a0为进程的pid,输入值请用16进制。
4.然后等程序被杀死后,查看audit的log文件。
tail /var/log/audit/audit.log -n 100
5.结果如下
type=SYSCALL msg=audit(1587869406.699:136148): arch=c000003e syscall=62 success=yes exit=0 a0=37238 a1=9 a2=9 a3=7ffd92496d60 items=0 ppid=276526 pid=276538 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=14925 comm="kill" exe="/usr/bin/kill" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=OBJ_PID msg=audit(1587869406.699:136148): opid=225848 oauid=-1 ouid=0 oses=-1 obj=system_u:system_r:initrc_t:s0 ocomm="media_stream_ga"
type=PROCTITLE msg=audit(1587869406.699:136148): proctitle=6B696C6C002D3900323235383438
6.其中225848为我的进程ID,被pid=276538的进程被杀死。使用了 exe="/usr/bin/kill"杀死的。然后查看系统日志,找找蛛丝马迹。
tail /var/log/messages -n 1000
7.最终找到是与别的程序进行websocket进行通讯,出现了websocket: close 1006 (abnormal closure): unexpected EOF通信错误,而被别人程序杀掉的。
找到原因就好解决了。

你可能感兴趣的:(疑难杂症)