我的目标是使用bash运行多个进程,然后等待用户输入(例如,发出'exit'命令)并退出该命令。
我认为我有点点零碎,但我很难把它们放在一起。
从我看到的情况来看,我可以通过将它们推到后面来运行多个进程,如下所示:
./process1 &
./process2 &
我也看到了$!返回最近运行的进程pid。这是否有意义:
./process1 &
pidA = $!
./process2 &
pidB = $!
从那里开始,我正在努力做到以下几点:
echo "command:"
read userInput
if["$userInput" == "exit"]; then
kill $pidA
kill $pidB
fi
这是否有意义,或者我似乎没有得到它?
答案 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