web-dev-qa-db-ja.com

プログラムがまだ実行されていないときに、タスクセットはどのようにしてpidを作成できますか?

処理能力を自分のマシンの単一コアのみに制限したいので、tasksetが単一コア、たとえばコア0を次のように設定するのに役立つことがわかりました(これへの礼儀 回答 ):

taskset -c 0 -p 45678

問題は、プログラムがまだ実行されていないときに、ここでprocess_idpidをどのように判別できるかということです。 Linuxが取得する任意のプロセスIDを設定するだけですか?この場合は45678?もしそうなら、次のようにシェルスクリプトでそれを行うことは可能ですか?

#!/bin/sh
# Set the processing unit
taskset -c 0 -p 45678

# run python script
python main.py
2
Katherine

tasksetを呼び出して、将来のプロセスで使用する設定を記録することはできません。 tasksetを呼び出すこのモードは、現在実行中のプロセス専用です。

新しいプロセスをコアに固定するには、ダイレクトモードでtasksetを呼び出します。 tasksetを呼び出して、実行するプログラムを指定します。

taskset -c 0 python main.py

それが機能する方法は次のとおりです。

  1. シェル(または他の呼び出しプログラム)は、実行する新しいプロセス( fork )を作成します( execvetaskset -c 0 python main.py
  2. tasksetを実行しているプロセスは、コア設定をそれ自体に適用します。
  3. プロセスが実行されます(execve再び)python main.py同じプロセスで。

これは、他のプロセスごとの設定が行われる方法です。シェルセッション(例:env)ではなく、単一のプロセス(例:export)に設定した場合の環境変数、CPU Nice、リダイレクト(通常、個別のユーティリティではなくシェル構文を介して実行されます)などの優れた機能。