2012-07-23 253 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 &