gpt4 book ai didi

C 中的自定义信号处理程序

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:55 24 4
gpt4 key购买 nike

考虑以下 C 代码块:

void TERMHandler(int sig){
signal (sig, SIG_DFL);
}

main() {
pid_t pid;
pid = fork()

if (pid == 0) {
signal(SIGTERM,TERMHandler);
while(1);
}
else
{
sleep(3);
kill(pid,SIGTERM);
sleep(3);
kill(pid,SIGTERM);
}
}

我们创建一个新进程并区分子进程(pid = 0)和父进程。

自定义处理程序可以用于每种类型的信号吗?如果是这样,假设我们创建了一个自定义处理程序,如果我只使用一次信号(或从不重置信号处理程序),那么所有信号之间不会有任何区别是否正确,因为它只会执行我的处理程序而不考虑函数中的信号?

我想说的是,这样对吗:

 signal(SIGTERM,CustomHandler);
signal(SIGTSTP,CustomHandler);
signal(SIGHUP,CustomHandler);
...

当父级运行 kill(pid, SomeSignal) 时会执行相同的代码吗?

最佳答案

Can a custom handler be used for every type of signals?

是的,可以注册相同的自定义信号处理函数来处理不同类型的信号,直至并包括可以在相关系统上捕获的所有信号。但是请注意,可能存在无法捕获的已定义信号。例如,在符合 POSIX 的系统上,SIGKILLSIGSTOP 具有此属性。

If so, assuming we create a custom handler, is it right that there wouldn't be any difference between all signals if I only use the signal once (or never reset the signal handler), since it would just execute my handler without considering the signal in the function?

信号处理函数在确定要做什么时没有义务考虑信号编号。无论如何,它都可以执行相同的操作,或者,就像在您的示例函数中一样,它可以简单地将信号编号传递给其他函数。您可能会或可能不会认为后者是前者的特例。

但是请注意,在 POSIX 系统上,sigaction() 函数比 signal() 函数更适合修改信号配置。在各种操作系统上,它的行为比 signal() 更灵活、更一致。

关于C 中的自定义信号处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787643/

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