Linux 进程间通讯之信号方式
来源:互联网 发布:Windows截图 编辑:程序博客网 时间:2024/05/01 08:19
创建几种信号:
SIGHUP: 从终端上发出的结束信号
SIGINT:来自键盘的中断信号(Ctrl-C)
SIGQUIT:来自键盘的退出信号(Ctrl-\)
SIGKILL:该信号结束接收信号的进程
SIGTERM: kill命令发出的信号
SIGCHLD:标识子进程停止或结束的信号
SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号
信号处理:
一、忽略此信号;(但SIGKILL和SIGSTOP信号不可被忽略)
二、执行用户希望的动作;(调用一个用户函数,执行用户希望的处理)
三、执行系统默认动作;(对大多数信号的系统默认动作是终止进程)
信号发送:(主要函数有kill和raise)
区别:
kill既可以向自身发送信号,也可以向其他进程发送信号,raise是向进程自身发送信号。
intkill(pid_t pid, int signo)
intraise(int signo)
alarm方式发送:
使用alarm函数可以设置一个时间值,当所设置的时间到了时,产生SIGALRM信号。如果不捕捉此信号,则默认动作是终止此进程。
unsigned int alarm(unsigned int seconds)
seconds:经过了指定的seconds秒后会产生SIGALRM
pause函数:
使调用进程挂起,直至捕捉到一个信号。
intpause(void)
只有执行了一个信号处理函数后,挂起才结束
signal
void(*signal (int signo, void (*func)(int)))(int)
-->
typedef void (*sighandler_t)(int)
sighandler_t signal(int signum,sighandler_t handler)
func可能的值:
1、SIG_IGN:忽略此信号
2、SIG_DFL:按系统默认方式处理
3、信号处理函数名:使用该函数处理
示例程序:
等待接收信号代码:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
void my_func(int sign_no){
if(sign_no==SIGINT)
printf("SIGINT.\n");
elseif(sign_no==SIGQUIT)
printf("SIGQUIT.\n");
}
int main(){
intpid = getpid();
printf("pidis: %d\n", pid); //获取进程的pid
signal(SIGINT, my_func);
signal(SIGQUIT, my_func);
pause();
exit(0);
}
测试代码:
#include <stdio.h>
#include <signal.h>
int main(){
kill(4909, SIGINT); //注: 4909是上面输出的进程pid
}
也可以使用kill命令发
kill-s SIGINT 4909或kill -s SIGQUIT 4909
也可以按Ctrl + C(SIGINT信号)或者Ctrl + \(SIGQUIT信号)
- Linux 进程间通讯之信号方式
- Linux 进程间通讯之信号方式
- linux 进程通讯之信号
- Linux系统进程间通讯-信号
- linux 进程间通讯方式
- Linux 进程间通讯之有名管道方式
- Linux 进程间通讯之共享内存方式
- Linux进程间通讯方式之管道pipe
- Linux 进程间通讯之有名管道方式
- Linux 进程间通讯之共享内存方式
- Linux进程通讯:信号(signal)
- Linux进程间通信方式之信号(signal)
- linux进程间通信方式之定时器信号alarm
- linux进程间通信方式之信号处理sigaction
- linux进程间通信方式之信号处理sigaction
- linux进程间通信方式之信号处理signal
- linux 进程通讯方式
- Linux—进程间通讯方式总结
- android wakelock的一些笔记
- MVC中Html.DropDownList的使用方法
- PHP HttpClient封装(可实现GET POST Cookie Session)
- 2.1线性表及其基本运算
- QTreeWidget的一些总结
- Linux 进程间通讯之信号方式
- 编写程序计算以下数列的前n项之和,其中n的值从键盘输入。
- About.com 2012最受欢迎浏览器评选揭晓
- Android学习:自定义Android标题栏(转载+原创)
- python正则表达式一例
- ios UITableView封装之下拉-上提-图片异步加载
- a different object with the same identifier value was already associated with the session
- Windows内核调试:符号文件配置
- wcf种种