[英]Perl not returning PID
如果我运行命令
nohup ./run > /dev/null 2>&1 & disown
在我的终端中,我回到了[1] 1234
,我理解为PID。
但是,当我在Perl中运行以下命令时,它会返回一个关于disown
被定义的东西的错误或者其他东西,但这不是重点。 当我删除disown
,终端返回相同的东西,但Perl什么都不返回。 它所分配的变量只是空白。
my $command = `nohup ./run > /dev/null 2>&1 &`;
print("a " . $command); // "a " to check if it's actually printing anything.
输出:
a
预期产量:
[1] 1234
如何让Perl显示我可以解析的命令的PID
@ar = split(/\s+/, $process);
$pid = $ar[1];
这是我在上一个问题中由另一个Stackoverflow用户提供的。
[1] 1234
仅由交互式shell的bash输出(即以-i
选项开头的)。
my $command = `sh -ic 'nohup ./run > /dev/null 2>&1 &' 2>&1`;
die "Can't execute child: $!\n" if $? < 0;
die "Child killed by signal ".($? & 0x7F)."\n" if $? & 0x7F;
die "Child exited with error ".($? >> 8)."\n" if $? >> 8;
或者更好,
use IPC::System::Simple qw( capture );
capture(q{sh -ic 'nohup ./run > /dev/null 2>&1 &' 2>&1});
另一个选择是使用Daemon :: Daemonize “daemonize”。 不幸的是,它只通过pid文件返回PID。
尝试这个
$pin1=`(nohup ./run >/dev/null 2>&1 \& echo \$! )`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.