web-dev-qa-db-ja.com

bashスクリプトで実行されたコマンドのプロセスIDを取得するにはどうすればよいですか?

2つのプログラムを同時に実行するスクリプトがあります。1つはCプログラムで、もう1つはcpulimitです。最初にCプログラムをバックグラウンドで「&」で開始し、次にCプログラムのPIDを取得します。バックグラウンドで「&」を使用して実行されるcpulimitに渡します。

以下でこれを試してみましたが、最初のプログラムが開始されるだけで、cpulimitは開始されません。

また、Arch Linuxのsystemdを使用して、これをrootとして起動スクリプトとして実行しています。

#!/bin/bash

/myprogram &

PID=$!

cpulimit -z -p $PID -l 75 &

exit 0
15
Skilo Skilo

私はこれを今解決したと思います、これによると link サブシェルを作成するには、この(コマンド)のようにコマンドをラップする必要があります。

#!/bin/bash

(mygprgram &)
mypid=$!
(cpulimit -z -p $mypid -l 75 &)

exit 0
5
Skilo Skilo

私はグーグルの最中にこれを見つけ、何かを追加したかっただけです。

ソリューションは機能しているようですが(サブシェルに関するコメントを参照)、この場合はpidを取得する必要はありません。次のようにコマンドを実行するだけです:

cpulimit -z -l 75 myprogram &
2
chris137