我想将处理能力限制为机器中的单个核心,因此我发现taskset
可以帮助设置单个核心,例如核心 0,如下所示(由此提供)回答):
taskset -c 0 -p 45678
问题是当我的程序还没有运行时,如何确定这里的process_id pid?在这种情况下,我们是否只是设置一个由 Linux 选取的任意进程 ID 45678
?如果是这样,是否可以在 shell 脚本中执行以下操作:
#!/bin/sh
# Set the processing unit
taskset -c 0 -p 45678
# run python script
python main.py
答案1
您无法调用taskset
来记录用于将来流程的设置。这种调用方式taskset
仅适用于当前正在运行的进程。
要将新进程固定到核心,请调用taskset
其直接模式。您调用taskset
并告诉它要执行什么程序。
taskset -c 0 python main.py
它的工作方式是:
- shell(或其他调用程序)创建一个新进程(
fork
) 执行 (execve
)taskset -c 0 python main.py
。 - 正在运行的进程
taskset
将核心设置应用于自身。 - 该进程在同一进程中(
execve
再次)执行。python main.py
这是进行其他每进程设置的方式:为单个进程设置环境变量(例如使用env
)而不是为 shell 会话(例如使用export
)设置环境变量、使用nice
、重定向(通常通过 shell 语法完成)而不是使用单独的实用程序)等。