【发布时间】:2017-11-27 22:25:06
【问题描述】:
我的 QNX 课堂笔记有这个例子,我似乎无法弄清楚我的教授是如何得出这个输出的。谁能彻底地向我解释一下?
当这个程序运行时,父进程的 PID 为 1234,子进程的 PID 为 5678。
输出 5678:计数器 = 0 1234: 计数器 = 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;
}
【问题讨论】:
-
那么..你自己运行过吗?
-
@EugeneSh.i 做了
-
你认为它会做什么?为什么?
-
@rici 我无法弄清楚为什么输出首先是 0,然后是 10
-
@bob:孩子的计数器是如何增加的?父母的情况如何?