2017-10-10 1 views
1

私はパラメータを含むnohupを使ってプログラムを実行するスクリプトを書いているので、コマンドをシェルコマンドにラップします。 私はプログラムのPIDを取得しようとしていますが、問題が発生しています。 これは私が実行しようとしていますものです:

nohup bash -c '../command --dir /mnt/raid/test/test.txt "https://www.google.com/" > temp.txt 2>&1 &'; APP_PID=$! | { 
      #APP_PID=$! 
      echo "the pid is ${APP_PID}" 
} 

次のようにこのスクリプトの結果は空のPIDを示しています。私は、多くのバリエーションを試してみましたし、スタックオーバーフローを検索しましたが、見つけることができませんでした

the pid is 

関連するもの。

質問私は間違って何をしていますか?

答えて

1

バックグラウンドプロセスがシェルのグランドチャイルド(bash -c)によって作成されているため、外部シェルからグランドチャイルドのPIDを取得できません。バックグラウンドで

ここ
nohup bash -c '../command --dir /mnt/raid/test/test.txt "https://www.google.com/" > temp.txt 2>&1'& APP_PID=$! && { 
      echo "the pid is ${APP_PID}" 
} 

nohup実行を、あなたはそのPIDを取得する:あなたは、代わりにこれを行うことができます。

+0

ありがとうございます!それは私が大部分のために持っていた混乱を私に説明する。ここで問題となるのは、2つのPIDが生成され、そのうちの1つだけがキャプチャされるということです。 'ps aux'の結果です: – adamst85

+0

2番目のコメントを残して申し訳ありません。忘れてしまったこと= Enterのコメントを送信する。ここに私が書いていたことがあります:ただ今問題は、それが2つのPIDを生成し、これだけがそれらの1つをキャプチャしているということです。これは 'ps aux'の結果です。root 32462 0.0 0.0 11140 1204 pts/3 S 15:14 0:00 ../command --dir /mnt/raid/test/test.txt" https:// www。 google.com/ "> temp.txt 2>&1 ルート32464 39.2 0.1 81352 33868 pts/3 S 15:14 0:01コマンド--dir /mnt/raid/test/test.txt" https:// www。 google.com/ "と返されたpidは32462です。他のpidはどのように取得できますか? – adamst85

+0

../commandには何がありますか?スクリプトですか?新しいプロセスを作り出すように見えます。 – codeforester

関連する問題