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