linux 进程间通信系列1,使用signal,kill
信号基本概念: 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。
kill函数的详细说明:kill
信号接收端:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>//write function
int flag = 0;
void sigusr1_handler(int sig){
printf("sig : %d\n", sig);
write(1, "signal called\n",14);
flag = 1;
}
int main(){
printf("pid=%d\n", getpid());
signal(SIGUSR1, sigusr1_handler);
while(1){
printf("waiting for signal\n");
sleep(5);
if(flag != 0){
printf("break loop\n");
break;
}
}
return 0;
}
信号发送端:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
int retval;
pid_t pid = atoi(argv[1]);
retval = kill(pid,SIGUSR1);
if ( retval )
{
perror( "kill" );
}
else
{
printf( "%d killed\n", pid );
}
}
在命令行里使用kill命令给信号接收端,发送信号也可以。
kill -s SIGUSR1 程序的PID