【发布时间】:2013-12-15 04:32:15
【问题描述】:
我不确定更复杂的信号和分叉问题。来自孩子或父母的信号呼叫之间有区别吗?
当一个孩子被分叉时,它现在是父母,但只是前父母的孩子吗?
由于包含处理程序,默认处理程序无效。那么您可以更改SIGINT 以不终止进程吗?
int count = 0;
void killhandler(int sig){
printf("SIGKILL received\n");
return;
}
void childhandler(int sig){
int status;
wait(&status);
count += WEXITSTATUS(status);
return;
}
main(){
int i; // for loop iterator
pid_t pid[3]; // pids of child processes
Signal(SIGKILL, killhandler);
Signal(SIGCHLD, childhandler);
// Fork 3 child processes
for(i=0; i<3; i++){
pid[i] = fork();
if(!pid[i]){ // If child process
Signal(SIGKILL, SIG_DFL);
exit(5);
}
}
// Parent process only
for(i=0; i<3; i++){
kill(pid[i], SIGKILL);
}
sleep(5);
printf("count = %d\n", count);
exit(0);
}
为什么"SIGKILL received" 从未打印出来?
为什么计数只能是:0、5、10、15
【问题讨论】: