Bash:在脚本中启动后杀死特定任务

时间:2017-10-26 12:52:32

标签: bash

我有一个小的bash脚本来启动一些服务来让我和同事的生活变得更轻松:

cd "${redis}"
redis-server ./redis.conf &
cd "${serverFolder}"
php artisan serve &
php artisan queue:listen &
cd "${clientFolder}"
laravel-echo-server start &

一切都很好。但现在我也想制作一个停止bash脚本。怎么样?我考虑使用killall,但如果我有另一个运行它的工匠网络服务器也会杀了它。我可以抓住PID,但同样的问题出现了。如何区分可能的其他正在运行的Web服务器和正确的服务器?

这样做有可能吗?

2 个答案:

答案 0 :(得分:1)

将PID存储在bash数组中并创建一个杀手级脚本:

declare -a PIDS=()
cd "${redis}"
redis-server ./redis.conf & PIDS+=($!)
cd "${serverFolder}"
php artisan serve & PIDS+=($!)
php artisan queue:listen & PIDS+=($!)
cd "${clientFolder}"
laravel-echo-server start & PIDS+=($!)
printf "kill -9 %s\n" "${PIDS[@]}" > kill-script.sh

然后,运行杀手脚本来停止您启动的服务器,只停止它们。

答案 1 :(得分:0)

您可以在"$!"或通过执行此操作

运行它之后获取它的PID
temp=`ps -eaf | grep <processname> | grep -v grep | awk '{print $2}'`
pid_array=($temp)
PID=${pid_array[${#pid_array[@]}-1]}

由此,您可以获得刚刚运行的过程的PID。 然后你可以随时杀死它。

这是否解决了您的问题?