Bashで新しいバックグラウンドプロセスのジョブIDをプログラムで取得する方法

Bashで新しいバックグラウンドプロセスのジョブIDをプログラムで取得する方法

Bashで始まるジョブのジョブIDをプログラムでどのように取得しますか&

バックグラウンドでジョブを開始し、対応するジョブ&IDとBash組み込みコマンド(たとえばfgbgなど)を使用してジョブkillと対話できます。

たとえば、私がこのようなことを始めた場合

yes > /dev/null &

その後、次のコマンドを使用してそのジョブを終了できます(ジョブがジョブID 1を取得すると仮定)。

kill %1

create a new jobを使用すると、&新しく作成されたジョブのジョブIDをプログラムでどのように取得できますか?


私はあなたが得ることができることを知っていますプロセス番号(ジョブIDではない)$!、特にジョブIDを取得する方法を知りたいです。

ベストアンサー1

このコマンドは、jobs現在実行中のバックグラウンドジョブとそのIDを印刷します。

$ for i in {1..3}; do yes > /dev/null & done
[1] 3472564
[2] 3472565
[3] 3472566

$ jobs
[1]   Running                 yes > /dev/null &
[2]-  Running                 yes > /dev/null &
[3]+  Running                 yes > /dev/null &

したがって、まだ実行中の最後に開始されたジョブのIDを取得するには次のように表示されます。+、次のことができます(GNUを使用grep)。

$ jobs | grep -oP '\d(?=]\+)'
3

または、より携帯性に優れています。

$ jobs | sed -n 's/^\[\([0-9]*\)\]+.*/\1/p'

ただし、ジョブのいずれかを一時停止するとそのジョブが置き換えられるため、最後の行のみをインポート+することをお勧めします。

$ jobs | tail -n1 | cut -d' ' -f1 | tr -d '][+'
3

おすすめ記事