当程序还没有运行时,taskset如何创建pid?

当程序还没有运行时,taskset如何创建pid?

我想将处理能力限制为机器中的单个核心,因此我发现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

它的工作方式是:

  1. shell(或其他调用程序)创建一个新进程(fork) 执行 (execvetaskset -c 0 python main.py
  2. 正在运行的进程taskset将核心设置应用于自身。
  3. 该进程在同一进程中(execve再次)执行。python main.py

这是进行其他每进程设置的方式:为单个进程设置环境变量(例如使用env)而不是为 shell 会话(例如使用export)设置环境变量、使用nice、重定向(通常通过 shell 语法完成)而不是使用单独的实用程序)等。

相关内容