2012-07-23 256 views
0

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

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

我想在我的命令中使用taskset命令multiply;

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

不行,问题是什么。例如,当我使用带echo的taskset时,它可以工作。

它不与守护工作。

更新:@chepner我认为你建议的第三种方法。它可以做到,但我更喜欢不再提取proc id。我使用守护进程作为守护进程运行,并设置-20到nice的process.So如果存在使用使用taskset设置CPU亲和性和很好的命令来设置优先级一起的方式,它也将是很好的

+0

了什么这与awk或者sed吗? – 2012-07-23 14:56:09

回答

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的额外呼叫。我怀疑这会创建两个守护进程,这是你不想要的。当你与daemon -20 $exec -a -b $var &做最初

  3. 启动守护进程。接下来,找到正在运行的进程ID为$exec。最后,运行taskset -c 0,1 -p $PID,其中PID$exec的进程ID。

我认为你需要使用#3的原因是daemontaskset各取一个命令作为一个参数并运行命令。正如你所建议的那样,任何一方都不能(轻易地)按照另一条线发起的命令行事。


你尝试,

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

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

+0

没有2个过程。我想运行一个进程$ exec -a -b $ var& 是可执行文件和参数,认为它是process1参数,所以我想运行process1作为守护进程并为其设置0,1个cpu核心 – barp 2012-07-23 13:37:00

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 &