2013-08-07 46 views
0

以下工作對我來說:等待兩個PID中的C-shell

>sleep 20 & 
[1] 30414 
>sleep 30 & 
[2] 30415 
>wait $30414 $30415 

這適用所有權利,直到我想寫到tmp.csh

這在我的tem.csh文件

sleep 20 & 
set pid1=$! 
sleep 30 & 
set pid2=$! 

當談到 「等待」

wait $pid1 $pid2 => too many arguments 
wait $pid1 => too many arguments 
wait \$$pid1 => too many arguments 
wait $($pid1) => Illegal variable name 

我該如何寫它?

這個問題是對的 How can I wait until specified "xterm" finished?

+2

**避免使用C-shell **。閱讀[C shell認爲有害](http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/)。改爲使用'zsh'或'bash'或'fish'外殼。閱讀[高級Bash腳本指南](http://www.tldp.org/LDP/abs/html/) –

+0

請注意'$ 30414'已擴展爲空!嘗試用'echo'作爲前綴的'wait'命令來確保.... –

+0

echo $ pid1 echo $ pid2 給出正確的數字。我猜這是$($ pid1)的語法錯誤? – thundium

回答

1

的解決方案的「等待」命令不會等待特定PID。嘗試在CSH下面等待特定PID:

#!/bin/csh -f 

sleep 30 & 
set pid1 = $! 
sleep 40 & 
set pid2 = $! 

while (`ps -p "$pid1,$pid2" | wc -l` > 1) 
    sleep 1 
end 
1

這tcsh的工作對我來說:

#!/bin/tcsh 

time 
sleep 10 & 
sleep 5 & 
wait 
time 

它看起來就像是等待不帶任何參數,只是等待,直到每backgorunded過程完。