我有一个在我的bash脚本中运行的命令;
daemon -20 $exec -a -b $var &
我想在命令multiply中使用taskset命令;
daemon -20 ; taskset -c 0,1 $exec -a -b $var &
这不起作用。问题是什么。例如,当我使用带有echo的taskset时,它可以工作。
它不适用于守护进程。
更新:@chepner我认为你建议的第三种方法。它可以完成,但我不想再次提取proc。我使用守护进程作为守护进程运行并将-20设置为漂亮的进程值。如果有的话是一种使用任务集来设置CPU亲和性和良好命令来一起设置优先级的方法,它也是好的
答案 0 :(得分:0)
分号分隔两个不同的过程(将其视为可见的新行)。
当您运行daemon -20 $exec -a -b $var &
时,您正在运行单个命令daemon
,该命令将(以及其他)存储在变量exec
中的参数作为作为守护程序运行的程序
[如果我猜对了,你想用taskset
命令启动两个守护进程。我想你想要的是
taskset -c 0,1 daemon -20 taskset -c 0,1 $exec -a -b $var
更新:我猜错了!这似乎有一个可怕的重复错误,任务集调用两次。 ]
有几种可能性:
daemon taskset -c 0,1 $exec -a -b $var
,看起来不错,但我怀疑是错的,因为它可能使taskset
成为守护进程,而不是$exec
。
taskset -c 0,1 daemon $exec -a -b $var
,这只是我之前回答的一个略微更正的形式,删除了对taskset
的额外调用。我怀疑这会创建两个你不想要的守护进程。
按原来使用daemon -20 $exec -a -b $var &
启动守护程序。接下来,找到它正在运行的进程ID $exec
。最后,运行taskset -c 0,1 -p $PID
,其中PID
是$exec
的进程ID。
我认为您需要使用#3的原因是daemon
和taskset
各自将命令作为参数并运行该命令。任何一个人都不能(轻松地)按照你的建议对另一个人在一行中开始的命令采取行动。
你的尝试,
daemon -20 ; taskset -c 0,1 $exec -a -b $var &
仅使用一个参数(daemon
)调用-20
,这可能会也可能不会执行任何操作(我不熟悉daemon
命令)。完成后,它调用taskset
命令在两个处理器上运行$exec
中命名的可执行文件。
答案 1 :(得分:0)
我不确定我是否理解你,如果这不能解答你的问题,请原谅。
你可以这样做:
daemon -20 $exec -a -b $var &
taskset -p -c 0,1 $!
将运行守护进程命令,然后立即设置它的CPU亲和性,或者:
taskset -c 0,1 daemon -20 $exec -a -b $var &
首先以适当的亲和力启动守护进程。
免责声明:我不熟悉taskset命令;这个答案完全取决于我对任务集手册页的阅读。
编辑:我不熟悉daemon
命令的确切功能。如果您只想在给定亲和力的后台运行存储在$ exec中的命令,这应该足够了:
taskset -c 0,1 $exec -a -b $var &