【发布时间】:2009-12-26 09:17:43
【问题描述】:
我正在编写一个 Perl 脚本,它将编写一些输入并将这些输入发送到外部程序。该程序挂起的可能性很小但非零,我想将其超时:
my $pid = fork;
if ($pid > 0){
eval{
local $SIG{ALRM} = sub { die "TIMEOUT!"};
alarm $num_secs_to_timeout;
waitpid($pid, 0);
alarm 0;
};
}
elsif ($pid == 0){
exec('echo blahblah | program_of_interest');
exit(0);
}
就目前而言,在 $num_secs_to_timeout 之后,program_of_interest 仍然存在。我试图在$SIG{ALRM} 的匿名子例程中杀死它,如下所示:
local $SIG{ALRM} = sub{kill 9, $pid; die "TIMEOUT!"}
但这并没有做任何事情。 program_of_interest 仍然存在。我该如何杀死这个进程?
【问题讨论】: