Bashで始まるジョブのジョブIDをプログラムでどのように取得しますか&
?
バックグラウンドでジョブを開始し、対応するジョブ&
IDとBash組み込みコマンド(たとえばfg
、bg
など)を使用してジョブ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