我的程序有时候会随机收到SIGKILL信号,gdb会提示:
Program terminated with signal SIGKILL, Killed.
The program no longer exists.
(gdb)
并且我找不到任何原因?什么时候系统会发送SIGKILL信号呢?我这里没有其他程序发送这个信号。。。
回答:
There are situations under which the kernel will send SIGKILL to a
process. Others have mentioned the Linux OOM killer; a more rarely
seen one is if you have a CPU-time resource hard limit set (such as
via the ulimit shell-builtin) then the kernel will send the process a
SIGKILL when the limit is reached.
在下列几种情况下,系统会发送SIGKILL信号:
1、OOM killer。out of memory 一般由于程序内存泄漏导致内存不足引起的。
2、CPU-time resource hard limit。用ulimit -t 查看系统对CPU使用时间有没有限制。如果超过限制,就会发送SIGKILL信号。
3、ptrace() (我也不太懂)
Another fairly 'standard' case is when the process tracing another
process using ptrace() dies without stopping the tracing; the traced
process is sent a SIGKILL then. Since the process in this case is
being actively traced with gdb, that would apparently not apply here,
but it does explain why killing gdb will kill a process that gdb is
attached to.
其他可能的情况:
-bad memory hardware (usually results in SIGSEGVs, but it looks like there are cases where SIGKILL will be generated)
内存硬件错误。通常会导致SIGSEGV,有时候也会发送SIGKILL。
- network or pseudo filesystem being ripped out from under the process
(不懂)
- hit the SysReq key
(不懂)
- various "secure computing" setups which restrict the operations a process can use
由于安全设置限制了进程的使用。