我在第三方perl脚本中遇到了一些奇怪的情况。为了证明:
my $rc = system("tar -C /app/src -xvf /app/package.tar.gz");
if ($rc != 0)
{
print "Return code: $rc";
}
直接在shell上运行tar -C /app/src -xvf /app/package.tar.gz
即可,echo $?
显示退出状态0
。都好。
此外,在运行此小型perl代码段时,返回始终 -1
。如果我尝试这样的话:
my $rc = system("ls");
if ($rc != 0)
{
print "Return code: $rc";
}
...返回码也是-1
。
我对perl的了解不多,所以我想知道什么可能触发这种行为。
文档没有特别提及(http://perldoc.perl.org/functions/system.html)。
解决方案:
获取$!
以获取有关错误的更多详细信息:
my $rc = system("tar -C /app/src -xvf /app/package.tar.gz");
if ($rc != 0)
{
print "Return code: $rc\n";
print "Reason: $!";
}
返回:
Return code: -1
Reason: No child processes
应用$SIG{'CHLD'} = 'DEFAULT';
解决了问题:
$SIG{'CHLD'} = 'DEFAULT';
my $rc = system("tar -C /app/src -xvf /app/package.tar.gz");
if ($rc != 0)
{
print "Return code: $rc\n";
print "Reason: $!";
}
一些细节来自: What's the difference between various $SIG{CHLD} values?
答案 0 :(得分:4)
在您链接到的文档中(强调我的):
-1 的返回值表示无法启动程序或wait(2)系统调用错误(检查
$!
原因)。