求大神帮我看下这段代码什么问题,C语言信号控制方面的

2025-02-24 01:39:45
推荐回答(1个)
回答1:

给你指出这个程序存在的问题:

  1. 在Linux中, SIGKILL 信号不能被阻塞,处理和忽略,这意味着你程序中的 "signal(SIGKILL, fun1)和signal(SIGKILL, fun2)" 永远捕捉不到你的 "kill(pid1, SIGKILL)和kill(pid2, SIGKILL)"。还有两个信号和SIGKILL一样特别,自己去查查。

  2. 然后就是你的程序其实已经kill掉进程1、2了,正如1中所述,用户不能处理SIGKILL,自然就不会调用 fun1() 和 fun2(),所以你在运行程序之后按下 “Ctrl+C”组合键能够看到“Parent process exit!”却看不到“Child process 1 is killed by parent! 和 Child process 2 is killed by parent! ”。

  3. 进程1、2被kill掉,waitpid()函数完成使命,父进程执行到 while (1) { } 循环里面,程序陷入死循环,你的程序执行流程就是这样。

  4. 你想让子进程在一直死循环,直到被父进程调用kill()函数kill掉,思路没有问题,但你却把这个死循环写在了程序的最后,这样做子进程1、2和父进程都会有一个死循环,导致程序最终不能退出。所以你可以分别在子进程1、2中写一个 while ( 1 ) { } ,而父进程不用,因为waitpid一结束父进程也就结束了。

    把问题说完了(不知道有没有说清楚),那么剩下的事情就是修改程序了,自己去琢磨琢磨吧!!!