c/c++ linux 進程間通信系列1,使用signal,kill


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;
}

github源代碼

信號發送端:

#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 );
    }
}

github源代碼

在命令行里使用kill命令給信號接收端,發送信號也可以。

kill -s SIGUSR1 程序的PID

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM