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

Kat*_*ine 3 linux cpu process shell-script taskset

我想将处理能力限制在我的机器中只有一个核心,所以我发现taskset可以帮助设置一个核心,比如核心 0,如下(由这个答案提供):

taskset -c 0 -p 45678
Run Code Online (Sandbox Code Playgroud)

问题是,当我的程序还没有运行时,我如何在这里确定 process_id pid?在这种情况下,我们是否只是设置了一个由 Linux 获取的任意进程 ID 45678?如果是这样,是否可以在 shell 脚本中执行以下操作:

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

# run python script
python main.py
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 8

您无法通过调用taskset来记录用于未来流程的设置。这种调用模式taskset仅适用于当前运行的进程。

要将新进程固定到核心,请taskset在其直接模式下调用。您调用taskset并告诉它要执行的程序。

taskset -c 0 python main.py
Run Code Online (Sandbox Code Playgroud)

它的工作方式是:

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

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