繁体   English   中英

Bash句柄退出多个进程

[英]Bash handle exiting multiple processes

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

我认为我有些零碎,但是很难将它们组合在一起。

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

./process1 &
./process2 &

我也看到了$! 返回最近运行的进程pid。 这样做,然后才有意义:

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

从那里,我正在尝试执行以下操作:

echo "command:"
read userInput

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

这有意义还是我似乎没有得到它?

看起来不错,尽管您可能需要在用户输入部分循环。

请注意,您需要谨慎使用shell语法。 “ pidA = $!” 不是你的想法; 那就是“ pidA = $!”。 前者将尝试运行一个名为pidA的程序或命令,该程序或命令的参数为“ =”,以及最后启动的后台命令的PID。

还要注意,您可以在外壳程序脚本终止时使用“ trap”命令来发出kill命令。 像这样:

trap "kill $!" EXIT

最终代码导致:

#!/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM