我被要求在这个问题中找到所有可能的输出:
#define N 4
int val = 9;
void handler(sig) {
val += 3;
return;
}
int main() {
pid_t pid;
int i;
signal(SIGCHLD,handler);
for (i=0;i<N;i++) {
if ((pid =fork()) == 0) {
val -= 3;
exit(0);
}
}
for (i=0;i<N;i++) {
waitpid(-1,NULL,0);
}
printf("val = %d\n",val);
}
我不知道线路信号(SIGCHLD,处理程序)的作用。我只发现以下内容:
SIGABRT - abnormal termination.
SIGFPE - floating point exception.
SIGILL - invalid instruction.
SIGINT - interactive attention request sent to the program.
SIGSEGV - invalid memory access.
SIGTERM - termination request sent to the program.
SIGCHLD 做什么?您能否也解释一下这个问题中的 for 循环?
我需要哪些必要的库来编译和运行这段代码?