我有一个应用程序冻结了。我无法使用 ^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)