微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – Perl没有返回PID

如果我运行命令

nohup ./run > /dev/null 2>&1 & disown

在我的终端中,我回到了[1] 1234的内容,我理解为PID.

但是,当我在Perl中运行以下命令时,它会返回一个关于不被定义的东西的错误或者其他东西,但这不是重点.当我删除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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐