gpt4 book ai didi

c - 当我执行 "kill -11 0"时,我的 shell 出现段错误

转载 作者:行者123 更新时间:2023-11-30 18:39:13 25 4
gpt4 key购买 nike

当我尝试在 bash、tcsh 或 zsh 上执行命令“/bin/kill -11 0”时,它不会出现段错误,但当我尝试在我的系统中执行该命令时,它会出现段错误。

所以我一定有一些我没有处理过的东西。

你知道它是什么吗?

谢谢。

最佳答案

当你的程序向自己发送信号 11 时,它实际上并没有出现段错误。

如果程序的执行导致“段错误”(即程序执行非法内存引用),则操作系统会发送程序 SIGSEGV(Linux 上的信号 11)。程序无法区分操作系统因程序错误而发送的 SIGSEGV 和调用 raisekill(可能来自另一个进程)发送的 SIGSEGV,因此它会做出响应,就好像出现了真正的程序错误一样。

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

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

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

注意:信号 11 在 Linux 上是 SIGSEGV,但不能保证 SIGSEGV 在不同操作系统上也将是信号 11(或甚至在 Linux 的 future 版本中)。您应该始终使用信号名称而不是数字。

关于c - 当我执行 "kill -11 0"时,我的 shell 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com