我有一个冻结的应用程序。 我不能用^ 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 $
在极less数情况下可以这样做。 但是,如果我是这个应用程序的作者,并尝试深入的问题,导致冻结,这是非常烦人的一遍又一遍。 有没有办法在这种情况下节省一些击键?
更新:
可以用pkill -f -9 myapp
replacepgrep + kill
,这要归功于Lee B
理想情况下,我想将path缩短为一个按键,如^ C。 不pipe它在什么层面上实现都没关系:在gnometerminal上,在bash上,在任何地方。
如果Ctrl-C不起作用,您应该可以使用Ctrl- \,它将发送一个KILL信号,而不是ctrl-c发送的TERM信号。
killall -9 myapp
? 我不太确定这是你在找什么,但这就是我如何强制性地停止应用程序的很多时间。 🙂
pkill -9 myapp
您的发行版可能无法提供pkill,但是如果没有,请获取它。
但是,这不是以编程方式终止软件的好方法。 你正在寻找一个string,并杀死任何匹配的东西。 不能保证一些不相关的应用程序不匹配。 说你的应用程序是“敬酒”,为面包烤好的时间。 你grep为此,并杀死它。 没问题。 但其他人可能会运行“video_toaster_daemon”。 video烤面包机是专业video效果系统的名称。 现在,你的剧本刚刚杀死了一些公司的电视graphics项目。 他们有点不高兴;)
相反,看看:
对于应用程序,请确保ctrl-C杀死它。 应该有一些方法来捕捉信号,并closures任何线程或通常阻止退出的任何东西。
如果您的应用程序真的是一个服务,请查看大多数init.d脚本运行程序的方式,并保存它们的进程ID,以便稍后终止它们。 停止你的服务应该像/etc/init.d/myserver stop一样简单。
如果您使用Control-Z作为后台进程,则可以使用作业控制作为快捷方式。 我经常这样做:
^z kill %1
kill -9
等,也将使用%1
样式参数。 有关作业控制的更多信息,请参阅bash手册页的“作业控制”部分。 jobs
指挥,特别是也是有帮助的。
你为什么不debugging应用程序,并尝试防止冻结?
如果你想快速做到这一点, kill -9 $(pgrep myapp)