gpt4 book ai didi

c - 如何安装信号处理程序名称 sig_handler

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

您好,我已经完成了这段代码,但是我还需要添加一些东西,例如。

  1. 忽略SIGINT信号
  2. 将 SIGINT 的信号处理程序恢复为默认值
  3. 捕捉信号SIGINT并打印出信号的数值

到目前为止这是我的编码

      void sig_handler(int signo)
{
// body of signal handler
}

int main()
{
struct sigaction act;
act.sa_flags = 0;
act.sa_handler = sig_handler;
sigfillset( & (act.sa_mask) );

if (sigaction(sig, &act, NULL) != 0)
{
perror("sigaction"); exit(1);
}
}

最佳答案

像这样的事情会让你开始。

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

void handle_signal(int signum)
{
printf("\nRecived signal: %d\n", signum);
switch(signum)
{
case SIGINT:
printf("I won't respond to ctrl-c!\n");

//restore to default
signal(SIGINT, SIG_DFL);
break;
case SIGWINCH:
//windows size change
break;
case SIGCONT:
//continue process 'fg' in terminal
break;
case SIGTSTP:
//ctrl-z
break;
default:
//others
break;
}
}

void listen_to_signals(void)
{
int i;

i = 0;
while (i < 32)
{
if (i != SIGKILL && i != SIGSTOP && i != SIGCHLD && i != SIGCONT &&
i != SIGURG && i != SIGIO)
signal(i, &handle_signal);
i++;
}
}

int main()
{
listen_to_signals();
while(1)
{}
}

请注意,我正在收听我能听到的所有信号:有些信号我听不到(比如杀戮)。

注意:使用'kill -9 pidof your_program'来停止它

注意:第一次 SIGINT 将被忽略,但第二次不会(因为我正在将其恢复为默认行为)

关于c - 如何安装信号处理程序名称 sig_handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409547/

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