Linux信号通讯编程(国嵌总结)

来源:互联网 发布:oracle删除数据库 11g 编辑:程序博客网 时间:2024/04/29 20:31
信号通讯流程为: 
①进程A/内核选择信号 
②发送信号 
③进程B接收信号并处理 
Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有: 
①SIGKILL:杀死进程 
②SIGSTOP:暂停进程 
③SIGCHLD:子进程停止或结束时用来通知父进程 

常用到的函数有:

kill函数

<pre name="code" class="objc">原型:int kill(pid_t,int sig)头文件:<sys/types.h><signal.h>功能:<span style="color:#ff0000;">传送信号给特定的进程,成功返回0,失败返回-1</span>参数:pid为接受信号的进程号:1. pid大于零时,pid是信号欲送往的进程的ID。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。4. pid小于-1时,信号将送往以-pid为组标识的进程。sig:发送的信号

signal函数

<pre name="code" class="objc">原型:typedef void (*sighandler_t)(int);/*函数指针*/      sighandler_t signal(int signum,sighandler_t handler)头文件:<signal.h>功能:<span style="color:#ff0000;">设置信号处理方式,成功则返回处理函数的函数指针,失败返回SIG_ERR</span>参数:signum:设置信号处理函数所依赖的信号编号     handler:信号处理函数。如果参数handler不是函数指针,则必须是下列两个常数之一:SIG_IGN:忽略参数signum指定的信号SIG_DEL:将参数signum指定的信号重设为预设的信号处理方式


pause函数

<pre name="code" class="objc">原型:int pause(void)头文件:<unistd.h>功能:<span style="color:#ff0000;">等待信号</span>

实例

send_signal.c (发送代码):

<pre name="code" class="objc">#include <unistd.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){pid_t pid;pid = atoi(argv[1]);  //字符到数字的转换,信号实质为数字kill(pid, SIGINT);   //传送信号到特定进程pidreturn 0;}


receive_signal.c(接收代码):
<pre name="code" class="objc">#include <signal.h>#include <stdio.h>#include <stdlib.h>void myfunction(int signal_sum)//自定义信号处理函数{if( signal_sum == SIGINT ){printf("capture signal is : SIGINT\n");}}void main(){        /*设置处理方式*/signal(SIGINT, myfunction);printf("wait ......\n");/*等待一个信号产生后才停止等待*/pause();exit(0);}











0 0