gpt4 book ai didi

c - 用于自定义信号处理程序的退出代码的最佳实践?

转载 作者:太空狗 更新时间:2023-10-29 11:11:43 30 4
gpt4 key购买 nike

我想对 SIGTERM 信号进行一些清理。同时我有代码检查过程返回代码和可能的信号退出。现在我对信号处理的最佳实践有疑问。是哪个?

void handle_sigterm(int sig) 
{
/* cleaning up some stuff */
/* … */
/* but what exit code to use? */

/* maybe 0, because the handler promises more graceful termination than default SIGTERM */
_exit(0);

/* exit code as-if exited by SIGTERM, because that is what initiated termination */
_exit(128+sig);

/* similar to above, but leave the details for the default handler */
signal(SIGTERM, SIG_DFL); /* (not entirely sure this is needed) */
raise(SIGTERM);
}

最佳答案

_exit(0)选项错误;它表示成功。使用 _exit(EXIT_FAILURE); 可能没问题。通过重新发出信号而死亡允许父进程明确地确定该进程由于信号而死亡。 POSIX 使用 128 + SIGTERM 约定(shell 通过将 $? 设置为 128 加上信号来报告因信号而死亡的进程的退出状态数字),但它有点模棱两可,因为进程可以以该状态自愿退出,如您的代码所示可能这样做。

如果您的程序通常由 shell 调用,那么任何非零退出都可以,但“128 加信号数”变体中的任何一个都更好。如果您的程序通常由您自己的另一个进程调用,该进程可以有效地区分“最终死于信号”和“可能死于信号”,则“重新发出信号”选项可能是最好的,尽管它不常用于练习。

关于c - 用于自定义信号处理程序的退出代码的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57943975/

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