2015-11-19 74 views
0

我的目標是使用bash運行多個進程,然後等待用戶輸入(例如,發出「退出」命令)並退出該命令。Bash句柄退出多個進程

我認爲,我有點點滴滴,但我很難將它們放在一起。

從我所看到的,我可以將它們推到後面,像這樣運行多個進程:

./process1 & 
./process2 & 

我也看到,$!返回最近運行的進程pid。這樣做,那麼意義:

./process1 & 
pidA = $! 
./process2 & 
pidB = $! 

從那裏,我試圖做到以下幾點:

echo "command:" 
read userInput 

if["$userInput" == "exit"]; then 
    kill $pidA 
    kill $pidB 
fi 

這是否有道理還是我沒有出現,以得到它?

回答

3

看起來不錯,儘管您可能需要在用戶輸入部分上進行循環。

請注意,您需要注意shell語法。 「pidA = $!」不是你所想的;那是「pidA = $!」。前者將嘗試運行名爲pidA的程序或命令,其參數「=」和最後啓動的後臺命令的PID。

另請注意,您可以使用「trap」命令在終止shell腳本時發出kill命令。就像這樣:

trap "kill $!" EXIT 
+0

在PIDA = $的空間!是什麼導致它錯誤 –

0

結束代碼導致:

#!/bin/bash 

pushd ${0%/*} 
cd ../ 
mongoPort=12345 
mongoPath="db/data" 
echo "Starting mongo and node server" 
db/bin/mongod --dbpath=$mongoPath --port=$mongoPort & 
MONGOPID=$! 
node server.js & 
NODEPID=$! 

while [ "$input" != "exit" ]; do 
read input 
    if [ "$input" == "exit" ]; then 
     echo"exiting..." 
     kill $MONGOPID 
     kill $NODEPID 
     exit 
    fi 
done