シェルスクリプトで最後に実行されたコマンドのpidを取得する方法は?

シェルスクリプトで最後に実行されたコマンドのpidを取得する方法は?

次のシェルスクリプトが必要です。

my-app &
echo $my-app-pid

しかし、先ほど実行したコマンドのpidを取得する方法がわかりません。

私はjobs -p my-appコマンドを使用してpidをgrepできることを知っています。ただし、シェルを複数回実行したい場合、この方法は機能しません。なぜなら作業仕様あいまいだ

答え1

最後に実行されたコマンドのPIDは、次の場所にあります。$!シェル変数:

my-app &
echo $!

答え2

取得PID:

#!/bin/bash
my-app &
echo $!

PID変数に保存:

#!/bin/bash
my-app &
export APP_PID=$!

すべてのインスタンスをPIDテキストファイルに保存します。

#!/bin/bash
my-app &
echo $! >>/tmp/my-app.pid

出力、エラーをPID別々のファイルとして保存:

#!/bin/bash
my-app >/tmp/my-app.log 2>/tmp/my-app.error.log &
echo $! >>/tmp/my-app.pid

echo "my-app PID's: $(cat /tmp/my-app.pid)"

答え3

次のことを試してください

pidof my_app >> /tmp/my_app.pid

答え4

次のようにしてみてください。

 ps ef | grep "[m]y-app" | awk '{print $2}'

プロセスの最初の文字を間に入れると、そのプロセスはリストに追加され[ ]ません。grep必要に応じてユーザー名をgrepすることもできます。

関連情報