小编ser*_*ixo的帖子

Windows和Linux中的Perl超时命令

我正在编写一个需要在Windows和Linux中运行的perl脚本,它将运行一个进程,如果花费的时间太长,则将其超时,假设退出超时则返回退出代码,并假设exitcode为零且未退出则返回stdout超时。我不需要STDIN或STDERR。我尝试使用IPC::run但无法正常工作。

我最接近的是IPC::Open3waitpid($pid, WNOHANG)。但是我遇到了障碍。我在Windows和Linux上看到了不同的结果。在下面的代码中,我给出open3了将失败的命令(ping没有任何参数-z)。在Linux上,代码立即返回负退出代码。在Windows上,命令超时。ping google.com -z在Windows命令行上运行会立即返回,告诉我没有这样的参数。为什么``waitpid''返回零?

use strict;
use warnings;
use POSIX ":sys_wait_h";
use IPC::Open3;

my $inFH;
my $outFH;
my @cmd = ("ping", "google.com", "-z");
my $pid = open3( $inFH, $outFH, 0, @cmd);
my $counter=0;
my $waitret;
my $exitcode;
do{
    $counter++;
    $waitret = waitpid($pid,WNOHANG);   
    $exitcode = $?;
}while( !$waitret and ($counter < 4_000_000));

if ($counter >= 4_000_000) {
    print "Command timed out\n";
    kill(9, $pid);
} else {
    print "Exit …
Run Code Online (Sandbox Code Playgroud)

perl timeout waitpid

5
推荐指数
1
解决办法
151
查看次数

标签 统计

perl ×1

timeout ×1

waitpid ×1