1. 程式人生 > >linux的父程序向子程序發kill訊號例子以及對子程序的狀態進行判斷

linux的父程序向子程序發kill訊號例子以及對子程序的狀態進行判斷

先看一個父程序向子程序發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)取得引發子程序暫停的訊號程式碼。