sig關不掉那種

int kill (pid_t pid, int sig)

if pid > 0 send sig to pid

if pid == 0 會發送信號到進程同組的每個進程,包括自身

if pid < -1 向組ID等於該pid 絕對值的組內所有進程發送信號

if pid == -1 除了init pid=1 和自身, 發給所有人

 

 

#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <string.h>

/*
我就想試試 SIGINT 以後再重新 cont,這樣的話,進程用 ctrl-C 就停不掉了,必須使用其他方法,

SIGQUIT ---> ctrl + \ 目前之前這樣退出
SIGTSTP -->ctrl + z SIGTSTP 掛起,從ps的結果可以看到
SIGINT --> type-c 
SIGCONT

*/

void handler(int sig)
{
   if(sig == SIGINT)
   {
      printf("type -C pessed,so I will send SIGCONT to me\n") ;
      kill (0, SIGCONT);  //發給該進程組裏的所有進程,包括自身
   }
   if(sig == SIGCONT)
   {
     printf("SIGCONT received\n");
   }
   else
   {
     printf("sig %d", sig);
   }
   

}

int main(void)
{
  struct sigaction sa;
  sigemptyset(&sa.sa_mask); //注意用法
  sa.sa_flags = 0;
  sa.sa_handler  = handler;
  if (sigaction(SIGINT, &sa, NULL) < 0) //添加想測試的函數
           printf("sigactionfail");  
  if (sigaction(SIGCONT, &sa, NULL) < 0)
           printf("sigactionfail"); 
  if (sigaction(SIGHUP, &sa, NULL) < 0)
          printf("sigactionfail"); 
  if (sigaction(SIGSTOP, &sa, NULL) < 0)
          printf("sigactionfail");       
  while(1)
    pause();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章