linux的父程序向子程序發kill訊號例子以及對子程序的狀態進行判斷
阿新 • • 發佈:2019-02-20
先看一個父程序向子程序發kill訊號例子:
判斷子程序退出狀態的巨集:#include <stdio.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> int main(int argc, const char *argv[]) { pid_t pid; int status; pid = fork(); if (0 == pid) { printf("Hi, I'm child process!\n"); sleep(10); } else if (pid > 0) { printf("Send signal to child process (%d)\n", pid); sleep(1); kill(pid, SIGABRT); wait(&status); if (WIFSIGNALED(status)) { printf("Child process received singal %d\n", WTERMSIG(status)); } } else { printf("Fork wrong!\n"); return 1; } return 0; }
子程序的結束狀態返回後存於status,底下有幾個巨集可判別結束情況
WIFEXITED(status)如果子程序正常結束則為非0值。
WEXITSTATUS(status)取得子程序exit()返回的結束程式碼,一般會先用WIFEXITED 來判斷是否正常結束才能使用此巨集。
WIFSIGNALED(status)如果子程序是因為訊號而結束則此巨集值為真
WTERMSIG(status)取得子程序因訊號而中止的訊號程式碼,一般會先用WIFSIGNALED 來判斷後才使用此巨集。
WIFSTOPPED(status)如果子程序處於暫停執行情況則此巨集值為真。一般只有使用WUNTRACED 時才會有此情況。
WSTOPSIG(status)取得引發子程序暫停的訊號程式碼。