web-dev-qa-db-ja.com

シェルスクリプトで最後に実行されたコマンドのPIDを取得するにはどうすればよいですか?

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

my-app &
echo $my-app-pid

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

jobs -p my-appコマンドでpidをgrepします。しかし、シェルを複数回実行したい場合、このメソッドは機能しません。 jobspecがあいまいだからです。

274
David S.

最後に実行されたコマンドのPIDは $! シェル変数:

my-app &
echo $!
364
enzotib

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)"
71
Eduardo Cuomo

のようなものを試してください

pidof my_app >> /tmp/my_app.pid
3
Piyush Jain

このためにpkillを使用することもできます。pkillを使用すると、プロセス名を指定するだけで、pidを取得する必要がなくなります。

https://linux.die.net/man/1/pkill

0
yath