Linux下的signal信号机制
来源:互联网 发布:看懂运营数据的书籍 编辑:程序博客网 时间:2024/05/02 23:58
在Linux中,要发送一个信号相当容易。程序员需要知道两个信息:要发送哪个信号,将这个信号发送给哪个进程。可以用 man 7 signal 找到一个可以利用的信号的列表。用户可以只将信号发送给用户自己的进程,也可以以root身份运行从而将信号发送给任意一进程。
#include<stdio.h> #include<signal.h> #include<unistd.h> #include<stdlib.h> void when_alarm(); void when_sigint(); void when_sigchld(int); void when_sigusr1(); void when_sigio(); int main() { int childpid;//子程序进程ID号 printf("程序已经开始运行,5秒钟后将接收到时钟信号。/n"); if ((childpid=fork())>0)//父进程 { signal(SIGALRM,when_alarm); //当接收到SIGALRM信号时,调用when_alarm函数 signal(SIGINT,when_sigint); //当接收到SIGINT信号时,调用when_sigint函数 signal(SIGCHLD,when_sigchld);//当接收到SIGCHLD信号时,调用when_sigchld函数 signal(SIGUSR1,when_sigusr1);//当接收到SIGUSR1信号时,调用when_sigusr1函数 signal(SIGIO,when_sigio);//当接收到SIGIO信号时,调用when_sigio函数 alarm(5); //5秒钟之后产生SIGALRM信号 raise(SIGIO); //向自己发送一个SIGIO信号 pause(); //将父进程暂停下来,等待SIGALRM信号到来 pause(); //将父进程暂停下来,等待SIGUSR1信号到来 pause(); //将父进程暂停下来,等待SIGCHLD信号到来 printf("------此时程序会停下来等待,请按下ctrl+c送出SIGINT信号-------/n"); pause(); //将父进程暂停下来,等待SIGINT信号到来 } else if(childpid==0) //子进程 { int timer; for(timer=7;timer>=0;timer--) //时钟计时5秒产生SIGALRM信号,再过2秒子进程退出,产生SIGCHLD信号 { if(timer>2) printf("距离SIGALRM信号到来还有%d秒。/n",timer-2); if(timer==4) kill(getppid(),SIGUSR1); //向父进程发送一个SIGUSR1信号 if((timer<=2)&&(timer>0)) printf("子进程还剩%d秒退出,届时会产生SIGCHLD信号。/n",timer); if(timer==0) //子进程退出,产生SIGCHLD信号 raise(SIGKILL); //子进程给自己发一个结束信号 sleep(1); //每个循环延时1秒钟 } } else printf("fork()函数调用出现错误!/n"); return 0; } void when_alarm() { printf("5秒钟时间已到,系统接收到了SIGALRM信号!/n"); } void when_sigint() { printf("已经接收到了SIGINT信号,程序将退出!/n"); exit(0); } void when_sigchld(int SIGCHLD_num) { printf("收到SIGCHLD信号,表明我的子进程已经中止,SIGCHLD信号的数值是:%d。/n",SIGCHLD_num); } void when_sigusr1() { printf("系统接收到了用户自定义信号SIGUSR1。/n"); } void when_sigio() { printf("系统接收到了SIGIO信号。/n"); }
0 0
- Linux下的signal信号机制
- Linux下的signal信号机制
- Linux下的signal信号机制
- Linux下的signal信号机制
- linux下的信号机制(signal)
- Linux下的signal信号机制
- Linux下的signal信号机制
- linux信号机制signal
- Linux Signal 信号机制
- Linux下Signal信号
- Linux下Signal信号
- Linux下Signal信号
- Linux下Signal信号
- Linux下Signal信号
- Linux下信号signal
- Linux下Signal信号
- Linux下Signal信号
- Linux下的信号(signal)
- 当雄县找富姐包养信息
- DT大数据梦工厂 温故而知新 之15讲
- 最简单的ListView中实现单选和多选效果
- 关于sublime text 3 配置
- 堆栈的一些小小的实践
- Linux下的signal信号机制
- DT大数据梦工厂 温故而知新 之16讲
- Android Api Demos登顶之路(十六)Recreate
- C语言的格式化输出函数printf
- java.lang.UnsupportedClassVersionError 错误分析
- 一阶谓词逻辑的几个系统(续)
- Ural 2018. The Debut Album
- [LeetCode] Fraction to Recurring Decimal
- DT大数据梦工厂 温故而知新 之17讲