我正在尝试处理线程中的超时。我的脚本有4个线程,每个线程都需要执行命令,如果命令过程耗时过长,就会终止命令。如何在线程内正确地退出子进程?
什么我做的是:
my $pid;
if (!($pid = fork))
{
my $pid2;
if (!($pid2 = fork))
{
exec_cmd $command;
}
local $SIG{ALRM} = sub {kill 9, $pid2;};
alarm $timeout;
waitpid $pid2, 0;
exit(0);
}
waitpid $pid, 0;
$ret = $?;
这是一个线程中执行,因此当孩子退出,其他线程仍然未连接。
此代码使用分叉,而不是线程。 –
是的,但它只是脚本的一部分,这段代码在一个线程内调用 – Robin
你的问题是什么? – pilcrow