0

我有一个在我的 bash 脚本中运行的命令;

daemon -20 $exec -a  -b $var &

我想将 taskset 命令与我的命令 multiply 一起使用;

daemon -20 ; taskset -c 0,1 $exec -a  -b $var &

但它不起作用。有什么问题。例如,当我使用带有 echo 的任务集时,它可以工作。

它不适用于守护进程。

更新:@chepner 我认为您建议的第三种方法。它可以完成,但我不想再次提取 proc id。我使用守护进程作为守护进程运行并将 -20 设置为进程的不错值。所以如果有办法使用taskset设置CPU亲和力和nice命令一起设置优先级,也很好

4

2 回答 2

0

分号分隔两个不同的进程(将其视为可见的换行符)。

当您运行 时daemon -20 $exec -a -b $var &,您正在运行一个命令,daemon该命令(除其他外)将存储在变量中的参数exec作为程序作为守护程序运行。

[如果我猜对了,你想使用taskset命令启动两个守护进程。我想你想要的是

taskset -c 0,1 daemon -20 taskset -c 0,1 $exec -a  -b $var

更新:我猜错了!无论如何,这似乎有一个可怕的重复错误,任务集被调用了两次。]

有几种可能:

  1. daemon taskset -c 0,1 $exec -a -b $var,看起来不错,但我怀疑是错误的,因为它可能会taskset生成一个守护进程,而不是$exec.

  2. taskset -c 0,1 daemon $exec -a -b $var,这只是我之前回答的稍微更正的形式,额外调用了taskset删除。我怀疑这会创建两个你不想要的守护进程。

  3. 像最初使用daemon -20 $exec -a -b $var &. 接下来,找到$exec它正在运行的进程 ID。最后,运行taskset -c 0,1 -p $PID,其中PID的进程 ID 是$exec.

我认为您需要使用#3 的原因是每个都将命令作为参数并运行该命令daemontaskset任何一方都不能(轻松地)按照您的建议对另一方在一行中启动的命令采取行动。


你的尝试,

daemon -20 ; taskset -c 0,1 $exec -a  -b $var &

daemon仅使用单个参数 ( ) 进行调用,该参数-20可能会或可能不会做任何事情(我不熟悉该daemon命令)。完成后,它调用taskset命令$exec在两个处理器上运行名为 in 的可执行文件。

于 2012-07-23T13:30:46.633 回答
0

我不确定我是否正确理解你,如果这不能回答你的问题,请原谅。

你可以这样做:

daemon -20 $exec -a -b $var &
taskset -p -c 0,1 $!

它将运行 daemon 命令,然后立即设置它的 CPU 亲和性,或者:

taskset -c 0,1 daemon -20 $exec -a -b $var &

它首先以适当的亲和力启动守护进程。

免责声明:我不熟悉taskset命令;这个答案完全基于我对任务集手册页的阅读。

编辑:我不熟悉该daemon命令的确切作用。如果您只想以给定的亲和力在后台运行存储在 $exec 中的命令,这应该就足够了:

taskset -c 0,1 $exec -a -b $var &
于 2012-07-23T13:44:15.603 回答