...... (some awesome script).............
echo "I just wanna kill the function, not this"
myFunction()
{
while true
do
echo "this is looping forever"
done
}
myFunction
...... (some awesome script)...............
如何在不从终端中删除脚本本身的情况下终止正在运行的函数?
答案 0 :(得分:3)
首先你不能“杀死”一个功能,“杀戮”指的是进程。
但是你可以在你的功能中安装一些特殊的信号处理,这可以使它以你想要的方式做出反应。
为此,在bash中使用trap,为要捕获的信号定义信号处理程序。
此处用作信号处理程序的函数也会清除陷阱,因为陷阱是全局的,并且可以在任何后续的SIGUSR1上调用定义的处理程序。
echo "I just wanna kill the function, not this"
trap_myFunction()
{
trap - SIGUSR1
return
}
myFunction()
{
trap trap_myFunction SIGUSR1
while true
do
echo "this is looping forever"
sleep 1
done
}
myFunction
echo "Continuing processing .."
现在,如果您启动此脚本并使用以下命令将其终止:
kill -SIGUSR1 pid_of_process
它将进入已安装的信号处理程序,它只是return
并在myFunction之后继续使用echo-command。
如果您使用任何其他信号杀死它,则不会触发陷阱,并且该过程将完全终止。