在 bash 中停止后台循环
Stop a background loop in bash
我目前正在做一个奇怪的项目 'Shellcord',这是一个仅在 bash 和一些内置函数中构建的 discord 机器人。
我已经可以获取心跳间隔了。所以我的问题。我的循环看起来像这样:
(while true
do
sleep $interval
echo '{"op":1,"d":null}' > ws0
done)&
现在,我也可以关闭机器人了。但是,我怎样才能停止这个心跳循环?
最简单的方法是这样的:
(while true; do
sleep $interval
echo '{"op":1,"d":null}'
done)&
trap "kill $!" 0
如果您在退出清理中有更多工作要做,您将需要更复杂的东西。您还可以设置陷阱以在开始循环之前向进程组发出信号。类似于:
pgid=$(ps -o pgid= $$| tr -d ' ')
trap 'kill -- -$pgid' 0
我目前正在做一个奇怪的项目 'Shellcord',这是一个仅在 bash 和一些内置函数中构建的 discord 机器人。
我已经可以获取心跳间隔了。所以我的问题。我的循环看起来像这样:
(while true
do
sleep $interval
echo '{"op":1,"d":null}' > ws0
done)&
现在,我也可以关闭机器人了。但是,我怎样才能停止这个心跳循环?
最简单的方法是这样的:
(while true; do
sleep $interval
echo '{"op":1,"d":null}'
done)&
trap "kill $!" 0
如果您在退出清理中有更多工作要做,您将需要更复杂的东西。您还可以设置陷阱以在开始循环之前向进程组发出信号。类似于:
pgid=$(ps -o pgid= $$| tr -d ' ')
trap 'kill -- -$pgid' 0