如何从终端杀死正在运行的bash函数?

时间:2015-01-30 15:18:20

标签: linux bash

...... (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)...............

如何在不从终端中删除脚本本身的情况下终止正在运行的函数?

1 个答案:

答案 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。

如果您使用任何其他信号杀死它,则不会触发陷阱,并且该过程将完全终止。