【问题标题】:How to cancel a process when Control+C is pressed in a shell script?在 shell 脚本中按下 Control+C 时如何取消进程?
【发布时间】:2016-05-24 01:15:40
【问题描述】:

我有一个可以做一些工作的脚本。它以适当的方式完成,但需要一段时间才能结束。因为我想模拟“作业正在运行”,所以我添加了一个微调器光标动画。

我在脚本的开头调用它,然后将该函数的 PID 分配给一个变量,当一切完成后,我只需将其终止以停止动画。

#!/bin/bash

spinner &
SPINNER_PID=$!

# a lot of stuff going on here...
# takes some time to finish

kill $SPINNER_PID &>/dev/null

printf "All done"

函数定义:

spinner() {
  local i sp n
  sp='/-\|'
  n=${#sp}
  while sleep 0.1; do
    printf "%s\b" "${sp:i++%n:1}"
  done
}

如果我不打扰,一切都会很好。

想象一下,我想通过调用Control+C 来取消我的长任务。它取消了,但微调器显然仍然有动画,因为它注意到了无限循环。

当脚本被手动取消并且无法到达kill $SPINNER_PID &>/dev/null时,我如何才能杀死它?

【问题讨论】:

    标签: bash macos shell cmd command-line-interface


    【解决方案1】:

    似乎有一个名为trap 的语句允许您在按下Ctrl-C 时运行代码。 herethis website有一个很好的解释 解释了如何在 Ctrl-C 上运行函数。

    trap your_func INT
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多