给你指出这个程序存在的问题:
-
進程1、2被kill掉waitpid()函数完成使命,父进程执行到 while (1) { } 循环里面程序陷入死循环,你的程序执行流程就是这样
-
你想让子进程在一直死循环,直到被父进程调用kill()函数kill掉思路没有问题,但你却把这个死循环写在了程序的最后这样做子进程1、2和父进程都会有一个死循环,导致程序最終不能退出所以你可以分别在子进程1、2中写一个 while ( 1 ) { } ,而父进程不用因为waitpid一结束父进程也就结束了。
把问题说完了(不知道有没有说清楚)那么剩下的事情就是修改程序了,自己去琢磨琢磨吧!!!
不好意思说漏了一个点,你在父进程中放了两个signal()函数这个函数和alarm()函数┅样,后面的会把前面的覆盖掉也就是说signal(SIGINT, kill2) 会把 signale(SIGINT, kill1) 覆盖掉。而且在按下Ctrl+C时子进程也会受到影响也就是可能你的父进程还没有发送kill信号,子進程就因为捕捉到SIGINT而退出了其实这里面还有很多东西需要挖掘的,只有实践多了才能明白其中的奥秘大学的教科书上只是提及但未深叺,深入是自己的事情我并不是一个高手,我是拿你的程序运行了一遍才说的我修改了你的程序,贴在下面你参考参考。多运行几遍你会发现fun1函数和fun2函数的顺序并不固定别问我为什么。代码私发给你吧超字数了。
谢谢,我也发现了,SIGINT会向所有前台进程发送兩个子进程都会收到,我在每个子进程里面加了signal(SIGINT,SIG_IGN),和pause(),然后可以正常运行了,谢谢