奇妙な問題があります。頭がよくわかりません。私がしているのは、基本的に bash コードを呼び出すだけの fn_rundumper という関数を実行することです。
pterm -z "cmd.sh" param1 &
バックグラウンド pid "27938858" を含む出力は次のとおりです。
fn_rundumper
running fn_dumper...
[1] 27938858
fn_dumper...done
次に、実行中のジョブ番号を見ると、PID「27938858」も示されています。
jobs -l
[1] + 27938858 Running $(pterm -z "$SCRIPTS_DIR/run_dumper.sh" $VO
次に、何が実行psされているかを確認するコマンドを実行します。pterms
ps | grep pterm
24285189 ? 00:00:00 pterm
27938859 ? 00:00:00 pterm
これにより PID が得られます27938859。ここが他と違う!
PID を強制終了27938858しても、何も起こらないようです。PID を強制終了27938859すると、バックグラウンドptermが閉じられます。
問題は、多くの異なるバックグラウンド pterm と、バックグラウンド タスクとして開かれていない (つまり、個別に実行される) 一部の pterm を実行したい場合があることです。そのため、整理するときは、スクリプトを介して開いた pterms を閉じたいだけです。
閉じる必要がある PID を確認するために使用しようとしてjobs -lいましたが、先ほど説明したように、これは間違った PID です。
なぜこれが起こるのか誰か説明できますか?また、正しいPIDを取得するために何をする必要がありますか? ありがとう!
- 編集1 -
私が考えることができる最善の方法は、ps | grep pterm前と後を実行し、結果を比較して新しい pterm PID を見つけることです...実行可能ですが、醜い:(
- 編集2 -
コマンドラインでこれを再度テストしました(関数呼び出しなし):
最初に私がした:
`pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $PROJECT_DIR` &
そして、ps / $!結果を見て、同じ動作を得ました。
それから私はしました:
pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $VOE_PROJECT_DIR &
つまり、バックティックが削除され、PID がすべて一致するようになりました。コードからバックティックを削除できると思いますが、それが何なのかよくわかりません!