C Signal Handler教授的例子解释

时间:2017-11-27 22:25:07

标签: c pid qnx

我的QNX课程笔记有这个例子,我似乎无法弄清楚我的教授如何提出该输出。谁能彻底向我解释这个?

当此程序运行时,父进程的PID为1234,子进程有5678。

输出 5678:counter = 0 1234:counter = 10

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>

/*
 * getpid() - returns the current processes pid.
 * getppid() - returns the parent processes pid.
 */

int counter = 0;

void signal_handler(int signo)
{
    counter++;
}

int main(int argc, char *argv[]) {
    int i = 0;
    int rv;

    struct sigaction sa;

    sa.sa_handler = signal_handler;
    //queue signals.
    sa.sa_flags = SA_SIGINFO;
    sigemptyset(&sa.sa_mask);

    sigaction(SIGUSR1, &sa, NULL);

    switch(fork())
    {
        case 0:
            for(i = 0; i < 10; i++)
            {
                kill(getppid(), SIGUSR1);
            }
            break;
        default:
            wait(&rv);
            break;
    }

    printf("%d: counter = %d\n", getpid(), counter);
    return 0;
}

0 个答案:

没有答案