C說話中操作過程旌旗燈號的相干函數應用詳解。本站提示廣大學習愛好者:(C說話中操作過程旌旗燈號的相干函數應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中操作過程旌旗燈號的相干函數應用詳解正文
C說話signal()函數:設相信號處置方法
頭文件:
#include <signal.h>
界說函數:
void (*signal(int signum, void(* handler)(int)))(int);
函數解釋:signal()會依參數signum 指定的旌旗燈號編號來設置該旌旗燈號的處置函數. 當指定的旌旗燈號達到時就會跳轉到參數handler 指定的函數履行. 假如參數handler 不是函數指針, 則必需是以下兩個常數之一:
1、SIG_IGN 疏忽參數signum 指定的旌旗燈號.
2、SIG_DFL 將參數signum 指定的旌旗燈號重設為焦點預設的旌旗燈號處置方法.
關於旌旗燈號的編號和解釋, 請參考附錄D
前往值:前往先前的旌旗燈號處置函數指針, 假如有毛病則前往SIG_ERR(-1).
附加解釋:在旌旗燈號產生跳轉到自定的 handler 處置函數履行後, 體系會主動將此處置函數換回本來體系預設的處置方法, 假如要轉變此操作請改用sigaction().
C說話kill()函數:傳送旌旗燈號給指定的過程
頭文件:
#include <sys/types.h> #include <signal.h>
界說函數:int kill(pid_t pid, int sig);
函數解釋:kill()可以用來送參數sig 指定的旌旗燈號給參數pid 指定的過程。參數pid 有幾種情形:
1、pid>0 將旌旗燈號傳給過程辨認碼為pid 的過程.
2、pid=0 將旌旗燈號傳給和今朝過程雷同過程組的一切過程
3、pid=-1 將旌旗燈號播送傳送給體系內一切的過程
4、pid<0 將旌旗燈號傳給過程組辨認碼為pid 相對值的一切過程參數 sig 代表的旌旗燈號編號可參考附錄D
前往值:履行勝利則前往0, 假如有毛病則前往-1.
毛病代碼:
1、EINVAL 參數sig 不正當
2、ESRCH 參數pid 所指定的過程或過程組不存在
3、EPERM 權限不敷沒法傳送旌旗燈號給指定過程
典范
#include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> main() { pid_t pid; int status; if(!(pid= fork())) { printf("Hi I am child process!\n"); sleep(10); return; } else { printf("send signal to child process (%d) \n", pid); sleep(1); kill(pid, SIGABRT); wait(&status); if(WIFSIGNALED(status)) printf("chile process receive signal %d\n", WTERMSIG(status)); } }
履行:
sen signal to child process(3170) Hi I am child process! child process receive signal 6