Bash句柄退出多个进程

时间:2015-11-19 23:26:27

标签: linux bash shell

我的目标是使用bash运行多个进程,然后等待用户输入(例如,发出'exit'命令)并退出该命令。

我认为我有点点零碎,但我很难把它们放在一起。

从我看到的情况来看,我可以通过将它们推到后面来运行多个进程,如下所示:

./process1 &
./process2 &

我也看到了$!返回最近运行的进程pid。这是否有意义:

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

从那里开始,我正在努力做到以下几点:

echo "command:"
read userInput

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

这是否有意义,或者我似乎没有得到它?

2 个答案:

答案 0 :(得分:3)

虽然您可能需要在用户输入部分上进行循环,但看起来不错。

请注意,您需要注意shell语法。 “pidA = $!”不是你的想法;这是“pidA = $!”。前者将尝试运行带有参数“=”的名为pidA的程序或命令以及上次启动的后台命令的PID。

另请注意,您可以使用“trap”命令在终止shell脚本时发出kill命令。像这样:

trap "kill $!" EXIT

答案 1 :(得分: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