在bash脚本中执行多个命令

时间:2012-07-23 12:57:10

标签: linux bash shell sed awk

我有一个在我的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亲和性和良好命令来一起设置优先级的方法,它也是好的

2 个答案:

答案 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

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

有几种可能性:

  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 &启动守护程序。接下来,找到它正在运行的进程ID $exec。最后,运行taskset -c 0,1 -p $PID,其中PID$exec的进程ID。

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


    你的尝试,

    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 &