0

我正在尝试使用 Perl 的HTTP::Server::Simple::CGI模块在远程机器上运行命令并使用返回其输出qx//,但$?似乎只返回-1- 命令是否成功(我很想知道它是否成功) .

特别是,我已将文档页面http://metacpan.org/pod/HTTP::Server::Simple#EXAMPLE$who上示例中的行设置更改为以下命令:HTTP::Server::Simple::CGI

my $who = qx/cat some_file/."\nReturns $?";

$?显示为-1文件是否存在。它显然基本上可以工作,因为如果文件存在,就会显示文件的内容。将此与

perl -le 'print qx/cat some_file/."\nReturns $?"'

这表明它256在失败或0成功时返回。顺便说一句,在错误情况下,它会报告失败stderr- 而不是 Simple 案例所做的事情。

有什么特别的事情我应该做的$?吗?

我在 Perl 5.14.2、Ubuntu 12.04 上。

4

1 回答 1

4

我进行了跟踪HTTP::Server::Simple::CGI,似乎它设置$SIG{'CHLD'}='IGNORE'为针对僵尸进程的预防措施。

local $SIG{'CHLD'}='DEFAULT'在我调用之前立即设置qx//允许我访问返回码。

于 2013-07-27T21:19:59.580 回答