#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void my_func(int sign_no)
{
if(sign_no==SIGINT)
printf("I have get SIGINT\n")
else if(sign_no==SIGTERM)
printf("I have get SIGQUIT\n")
}
int main()
{
printf("Waiting for signal SIGINT or SIGTERM \n ")
printf("process is %d\n ",getpid())
signal(SIGINT, my_func)
signal(SIGTERM, my_func)
while(1)
exit(0)
}
linux 平台就 用while阻塞就行
不知道你用的是什么平台?
姓名:冯成 学号:19020100164 学院:丁香二号书院转自:https://feixiaoxing.blog.csdn.net/article/details/7226657
【嵌牛导读】本文将介绍linux下的C语言开发中如何进行信号处理
【嵌牛鼻子】linux C语言 信号
【嵌牛提问】linux下的C语言开发中如何进行信号处理?
信号处理是linux程序的一个特色。用信号处理来模拟操作系统的中断功能,对于我们这些系统程序员来说是最好的一个选择了。要想使用信号处理功能,你要做的就是填写一个信号处理函数即可。一旦进程有待处理的信号处理,那么进程就会立即进行处理。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
int value = 0
void func(int sig)
{
printf("I get a signal!\n")
value = 1
}
int main()
{
signal(SIGINT, func)
while(0 == value)
sleep(1)
return 0
}
为了显示linux对signal的处理流程,我们需要进行两个步骤。第一,输入gcc sig.c -o sig, 然后输入./sig即可;第二则重启一个console窗口,输入ps -aux | grep sig, 在获取sig的pid之后然后输入kill -INT 2082, 我们即可得到如下的输出。
[root@localhost fork]#./sig
I get a signal!
[root@localhost fork]#
信号是程序执行过程中出现的异常情况。它可能是由程序中的错误造成的,例如引用内存中的一个非法地址;或者是由程序数据中的错误造成的,例如浮点数被0除;或者是由外部事件引发的,例如用户按了Ctrl+Break键。你可以利用标准库函数signal()指定要对这些异常情况采取的处理措施(实施处理措施的函数被称为“信号处理函数”)。signal()的原型为:
#include<signal.h>
void(*signal(int hum,void(*func)(int)))(int);
如果定义一个typedef,理解起来就容易一些了。下面给出的sigHandler_t类型是指向一个程序的指针,该函数有一个int类型的参数,并且返回一个void类型:
typedef void(*sigHandler_t)(int);
sigHandler_t signal(int num , sigHandler_t func);
signal()有两个参数,分别为int类型和sigHandler_t类型,其返回值为sigHandler_t类型。以func参数形式传递给signal()的那个函数将成为第num号异常情况的新的信号处理函数。signal()的返回值是信号hum原来的信号处理函数。在设置了一个暂时的信号处理函数之后,你可以利用该值恢复程序先前的行为。num的可能值依赖于系统,并且在signal.h中列出。func的可能值可以是你的程序中的任意函数,或者是SIG_DFL和SLG_IGN这两个特别定义的值之一。SIG_DFL是指系统的缺省处理措施,通常是暂停执行程序;SIG_IGN表示信号将被忽略。