我有一个小的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服务器和正确的服务器?
这样做有可能吗?
答案 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)
您可以在"$!"
或通过执行此操作
temp=`ps -eaf | grep <processname> | grep -v grep | awk '{print $2}'`
pid_array=($temp)
PID=${pid_array[${#pid_array[@]}-1]}
由此,您可以获得刚刚运行的过程的PID。 然后你可以随时杀死它。
这是否解决了您的问题?