所以我一直在阅读StackOverflow上的帖子和fork手册,但我仍然无法理解我看到的行为,可能是因为我只寻找我想要的东西。
这是一个简单的程序,它接受文件名,生成子进程,在文件上运行stat(),然后循环中通过SIGUSR1或2将信号返回给父进程。父进程只想知道是1还是2…
但我得到的是"User defined signal 2",然后程序退出。但父进程在while循环中,不应该会持续执行吗?
总之,我真的希望有人能解释为什么我没有得到预期的输出,特别是循环反复询问文件名并每次生成一个子进程,而父进程要知道子进程通过kill()返回的信号是什么。
这是一个简单的程序,它接受文件名,生成子进程,在文件上运行stat(),然后循环中通过SIGUSR1或2将信号返回给父进程。父进程只想知道是1还是2…
但我得到的是"User defined signal 2",然后程序退出。但父进程在while循环中,不应该会持续执行吗?
总之,我真的希望有人能解释为什么我没有得到预期的输出,特别是循环反复询问文件名并每次生成一个子进程,而父进程要知道子进程通过kill()返回的信号是什么。
pid_t pid;
while(1) {
if(pid == 0) // i am the child
{
FILE *fp = fopen(fname, "r");
if(fp == NULL){
printf("%d] Child cannot find [%s].", msg++, fname);
fclose(fp);
}
else {
stat(fname, &st);
n = st.st_size;
printf("%d] Child read %d chars.\n", msg++, n);
if(n%2) kill(pid, SIGUSR1);
else kill(pid, SIGUSR2);
}
}
else // im the parent
{
if( signal(SIGUSR1,NULL) ) // Code never gets here because it ends
printf("%s is odd\n", fname );
if( signal(SIGUSR2, NULL) )
printf("$s is even\n", fname );
printf("%d] Enter filenames until you're happy. 'die' to end.\n", msg++);
scanf("%s", fname);
pid = fork();
}
}
return 0;
pid_t pid;
。 - Grijesh Chauhan