子进程超时又父进程强制结束,但是子进程在规定的时间内完成了。父进程如何结束?
以下是我的代码:
isOvertime()是超时判断函数
- Perl code
use warnings;use strict;my($pid);$| = 1;if($pid=fork()){ print("$pid \n"); sleep(1); while(1) { if (isOvertime()) { kill('STOP',$pid); print("Sorry,you are overtime .\n"); exit(); } else { if(wait()) { print("OK , now i can go .\n"); exit(); } } }}elsif(defined($pid)){ sleep(30); print("i am ok! \n"); exit(); }else{ print("error \n"); }原来的程序设计是循环来控制时间。
但是程序执行到wait()的时候,就不循环了,一直在等待子进程的结束。。
如果我想让子进程在规定时间内完成的话,父进程就结束,应该如何来设计这个程序?
[解决办法]
不要用wait
用waitpid 指定为WNOHANG方式
这样就不会一直等待