杀死冻结应用程序的方法

杀死冻结应用程序的方法

我有一个应用程序冻结了。我无法使用 ^C 终止它,因此我必须执行以下操作:

$ ./myapp 
^C^Z
[1]+  Stopped                 ./myapp
$ pgrep -lf myapp
18479 bash ./myapp
$ kill -9 18479
$ fg
bash: fg: job has terminated
[1]+  Killed                  ./myapp
$

在极少数情况下这样做是可以的。但如果我是此应用程序的作者并尝试深入研究导致冻结的问题,那么一遍又一遍地这样做非常烦人。在这种情况下有没有办法节省一些按键?

更新:

pgrep + kill可以替换为pkill -f -9 myapp,感谢 Lee B

理想情况下,我希望将路径缩短为一个按键,例如 ^C。它在哪个级别实现并不重要:在 gnome 终端上、在 bash 上,无论在哪里。

答案1

如果 Ctrl-C 不起作用,您应该可以使用 Ctrl-\,它将发送 KILL 信号,而不是 ctrl-c 发送的 TERM 信号。

答案2

killall -9 myapp? 我不太确定这是否是您要找的,但这就是我很多时候强制停止应用程序的方法。:)

答案3

pkill -9 myapp

你的发行版可能不提供 pkill,但如果没有,请获取它。

不过,这不是以编程方式终止软件的好方法。您正在查找字符串,并终止任何匹配的内容。无法保证某些不相关的应用程序不会匹配。假设您的应用程序是“toast”,用于计时面包何时烤好。您查找它并终止它。没问题。但其他人可能会运行“video_toaster_daemon”。Video Toaster 是专业视频效果系统的名称。现在,您的脚本刚刚杀死了某家公司的电视图形项目。他们有点不高兴 ;)

相反,研究一下:

  • 对于应用程序,请确保 ctrl-C杀死它。应该有某种方法来捕获信号,并关闭任何线程或通常阻止退出的东西。

  • 如果您的应用确实是一项服务,请查看大多数 init.d 脚本运行程序并保存其进程 ID 以便稍后终止它们的方式。停止服务应该像 /etc/init.d/myserver stop 一样简单。

答案4

为什么不调试应用程序并尝试防止冻结?

如果你想快速完成此操作,kill -9 $(pgrep myapp)

相关内容