gpt4 book ai didi

C - linux 中的进程处理任何信号

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:43 26 4
gpt4 key购买 nike

我正在编写代码,其中包含必须处理我给他的任何信号的进程。我读到我应该做那样的事情

void signalHandler(int sig_num)
{
// some stuff
}

//My process
int i;
for (i = 1; i <= 64; i++)
signal(i, signalHandler);

这是正确的解决方案吗??

最佳答案

尽管@Dylan 的解决方案看起来不错而且确实如此,但它带来了一个常见问题,即与 signal 功能的兼容性问题。因此建议您始终使用 sigaction。这是一个例子

#include <stdio.h>
#include <signal.h>

static void handler(int signo){
write(stdout, &signo, sizeof(int));
}

int main() {
struct sigaction sa;
sa.sa_handler = handler;
int i;
for (i = 1; i <= 64; i++) {
sigaction(i, &sa, NULL);
}
while(1);
return 0;
}
  1. 尽量避免使用signal
  2. 切勿使用任何不是 Reentrant 的函数 或不是 Async-signal-safe 信号处理程序中的函数,例如 printf

检查来自 here 的信号处理程序中允许的函数列表

POSIX.1-2004 (also known as POSIX.1-2001 Technical Corrigendum 2) requires an implementation to guarantee that the following functions can be safely called inside a signal handler:

关于C - linux 中的进程处理任何信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34539343/

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