3

コマンドを実行すると

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 ユーザーから提供されたものです。

4

2 に答える 2

8

[1] 1234は、対話型シェル (つまり、-iオプションで開始されたもの) の bash によってのみ出力されます。

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を使用して「デーモン化」することです。残念ながら、pid ファイルを介してのみ PID を返します。

于 2013-09-01T23:17:17.310 に答える
0

これを試して

  $pin1=`(nohup ./run >/dev/null 2>&1 \& echo \$! )`   
于 2013-09-04T19:07:59.067 に答える