子进程超时又父进程强制结束,但是子进程在规定的时间内完成了。父进程如何结束?

chenxsh2615 2008-03-19 11:03:18
以下是我的代码:
isOvertime()是超时判断函数

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()的时候,就不循环了,一直在等待子进程的结束。。

如果我想让子进程在规定时间内完成的话,父进程就结束,应该如何来设计这个程序?
...全文
186 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoyangalin4 2012-07-26
  • 打赏
  • 举报
回复
问下你这个isovertime()是什么函数啊,
chenxsh2615 2008-03-19
  • 打赏
  • 举报
回复
多谢ls 解决了。

代码:


use warnings;
use strict;
use POSIX 'WNOHANG';

$SIG{ STOP } = \&stop;

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(waitpid(-1,WNOHANG))
{
print("OK , now i can go .\n");
exit();
}
}
}
}
elsif(defined($pid))
{
my $parent=getppid();
print ("$parent \n");
sleep(10);
print("i am ok! \n");
exit();
}
else
{
print("error \n");
}


http://www.linux-cn.com/html/linux/system/20070505/27608_3.html 这个地址上面有waitpid的详细说明。

yecheng_110 2008-03-19
  • 打赏
  • 举报
回复
不要用wait
用waitpid 指定为WNOHANG方式
这样就不会一直等待

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧