gpt4 book ai didi

捕获linux中的所有信号

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:57 30 4
gpt4 key购买 nike

我正在尝试在 C/linux 中编写一个忽略 SIGINT 和 SIGQUIT 信号并为 SIGTERM 退出的进程。对于其他信号,它应该写出信号和时间。我无法接收所有信号,因为我只熟悉捕获 1 个信号。如果有人能帮我解决这个问题,我将不胜感激。这是我的代码:

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>

int done = 0;

void term(int signum)
{
if (signum == 15)
{
//printf("%d\n",signum);
printf("Received SIGTERM, exiting ... \n");
done = 1;
}
else
{
time_t mytime = time(0);
printf("%d: %s\n", signum, asctime(localtime(&mytime)));
printf("%d\n",signum);
}
}

int main(int argc, char *argv[])
{
struct sigaction action;
memset(&action, 0, sizeof(struct sigaction));
action.sa_handler = term;
sigaction(SIGTERM, &action, NULL);
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_handler = SIG_IGN;
sigaction(SIGQUIT, &act, NULL);
sigaction(SIGINT, &act, NULL);

int loop = 0;
while(!done)
{
sleep(1);
}

printf("done.\n");
return 0;
}

最佳答案

简单的方法

void sig_handler(int signo)
{
if (signo == SIGINT)
printf("received SIGINT\n");
}

int main(void)
{
if (signal(SIGINT, sig_handler) == SIG_ERR)

等等。

signal() 和 sighandler() 是最简单的方法。

为您要捕获的每个信号调用信号。但正如一些人之前所说,你只能捕捉到某些信号。最好有一种正常关闭程序的方法。

关于捕获linux中的所有信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618579/

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