処理能力を自分のマシンの単一コアのみに制限したいので、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
taskset
を呼び出して、将来のプロセスで使用する設定を記録することはできません。 taskset
を呼び出すこのモードは、現在実行中のプロセス専用です。
新しいプロセスをコアに固定するには、ダイレクトモードでtaskset
を呼び出します。 taskset
を呼び出して、実行するプログラムを指定します。
taskset -c 0 python main.py
それが機能する方法は次のとおりです。
fork
)を作成します( execve
)taskset -c 0 python main.py
。taskset
を実行しているプロセスは、コア設定をそれ自体に適用します。execve
再び)python main.py
同じプロセスで。これは、他のプロセスごとの設定が行われる方法です。シェルセッション(例:env
)ではなく、単一のプロセス(例:export
)に設定した場合の環境変数、CPU Nice
、リダイレクト(通常、個別のユーティリティではなくシェル構文を介して実行されます)などの優れた機能。