2

PSEXEC を使用しsystem($CMD)て perl でリモート プロセスを実行しています。

system を実行するコンピューター (it-#1 と呼びましょうcmd) と、コンピューター #1 からコマンドを「受け取る」別のコンピューター (it-#2 と呼びましょう) があります。

2 台目のコンピューター (#2) のプロセスがスタックすることがあります。

cmd数分後にコマンドを強制終了するタイムアウトをコンピューター #1 のシステムに設定するにはどうすればよいですか?


答えてくれてありがとう、しかし:私は非常に簡単なことをしようとしています.2つのperlファイルがあります。1 ~ 10 秒をカウントする file#1。 (+画面に出力) file#2 - タイムアウト ファイル。

結果...: タイムアウトが発生しましたが、プロセス #1 はまだ実行中です...

ファイル#2

$timeout=5;
eval {
    local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
    alarm $timeout;
    $nread = system('F:\perl1.pl');
    alarm 0;
};
if ($@) {
    die unless $@ eq "alarm\n";   # propagate unexpected errors
    print "process terminated\n";}
else {
    # didn't
}

ファイル#1

$i=0;
while($

    i<10){
    sleep(1);
    $i++;

print "$i\n";
}

CMD ウィンドウの結果:

C:\>F:\perl2.pl
1
2
3
4
process terminated

C:\>5
6
7
8
9
10
4

2 に答える 2

4

IPC::Runに処理させてください。

use IPC::Run qw( run timeout );

run \@cmd, timeout( 120 )
   or die "cat: $?";
于 2013-06-04T16:40:51.033 に答える