我使用以下腳本從作爲參數傳遞的命令中捕獲STDIN
,STDOUT
和STDERR
。如何檢查IPC :: open3執行的命令是否被掛起?
#!/usr/bin/perl
use strict;
use warnings;
use IPC::Open3;
local(*CMD_IN, *CMD_OUT, *CMD_ERR);
my $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $ARGV[0]);
close(CMD_IN);
my @stdout_output = <CMD_OUT>;
my @stderr_output = <CMD_ERR>;
close(CMD_OUT);
close(CMD_ERR);
waitpid ($pid, 0); # reap the exit code
print "OUT:\n", @stdout_output;
print "ERR:\n", @stderr_output;
這一切都很好,除了我不確定如何監視命令傳遞是否掛起。你能提出一個建議嗎?
我借用了這個片段,最初來自'編程Perl'。
非常感謝!我實際上實現了一些可以完成這項工作的東西,但我寧願避免使用信號並改用您的解決方案。無論如何,如果其他人感興趣,我會發布它。 – Nobilis