我使用以下脚本从作为参数传递的命令中捕获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