我正在尝试使用Perl的HTTP::Server::Simple::CGI
模块在远程计算机上运行命令并使用qx//
返回其输出,但$?
似乎只返回-1
- 命令是否成功(我非常想知道它是否成功)。
特别是,我已将$who
文档页面http://metacpan.org/pod/HTTP::Server::Simple#EXAMPLE中示例中的行设置HTTP::Server::Simple::CGI
更改为此命令:
my $who = qx/cat some_file/."\nReturns $?";
但$?
显示为-1
文件是否存在。它显然基本上正常工作,因为文件的内容如果存在则显示。与此对比
perl -le 'print qx/cat some_file/."\nReturns $?"'
表示失败时返回256
或成功时返回0
。顺便说一下,在错误的情况下,它报告了stderr
的失败 - 而不是简单案例所做的事情。
我应该使用$?
做一些特别的事情吗?
我使用的是Perl 5.14.2,Ubuntu 12.04。
答案 0 :(得分:4)
我通过HTTP::Server::Simple::CGI
进行了跟踪,似乎将$SIG{'CHLD'}='IGNORE'
设置为防范僵尸进程的预防措施。
在调用local $SIG{'CHLD'}='DEFAULT'
之前立即设置qx//
允许我访问返回码。