当我做的时候我的shell段错误" kill -11 0"

时间:2015-06-04 16:28:05

标签: c shell unix

当我尝试执行命令" / bin / kill -11 0"在bash,tcsh或zsh上,它不会发生段错误,但是当我尝试在我的网站上执行此操作时,确实会这样做。

所以我必须拥有一些我无法处理的东西。

你知道它可能是什么吗?

感谢。

1 个答案:

答案 0 :(得分:3)

当程序发送信号11时,你的程序实际上并不是段错误。

如果程序的执行导致"段故障" (即程序执行非法内存引用),然后操作系统发送程序SIGSEGV(Linux上的信号11)。程序无法区分操作系统由于程序错误而发送的SIGSEGV和通过调用raisekill发送的SIGSEGV,可能来自另一个进程,因此它将作出响应有一个真正的程序错误。

如果要保护shell免受来自子进程发送到pid 0的信号的影响,则需要通过在fork之后调用子进程中的setpgid来确保子进程位于不同的进程组中。

默认情况下,程序由SIGSEGV终止。默认情况下,调用该程序的shell将报告该程序已被SIGSEGV终止。这通常被称为" segfaulting",但如上所述,它可能不是真正的程序错误的结果。

如果您希望程序执行其他操作,则必须使用信号处理程序捕获信号SIGSEGV;例如,如果在程序终止之前需要进行一些清理。大多数shell(和数据库)都这样做,但在用户代码中很少需要。

注意: Linux上的信号11为SIGSEGV,但无法保证SIGSEGV将在不同的操作系统上显示信号11(或者甚至在某些未来的版本中Linux的)。您应始终使用信号的名称而不是数字。