首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动化Killall然后Killall级别为9

自动化Killall然后Killall级别为9
EN

Stack Overflow用户
提问于 2012-08-09 18:08:24
回答 3查看 606关注 0票数 3

有时我想对某个进程进行killall,但是运行killall不起作用。因此,当我再次尝试启动进程时,它会失败,因为上一次会话仍在运行。然后,我不得不在上面乏味地运行killall -9。因此,为了简化我的生活,我创建了一个realkill脚本,它如下所示:

代码语言:javascript
复制
PIDS=$(ps aux | grep -i "$@" | awk '{ print $2 }') # Get matching pid's.
kill $PIDS 2> /dev/null # Try to kill all pid's.
sleep 3
kill -9 $PIDS 2> /dev/null # Force quit any remaining pid's.

,所以,这是最好的方法吗?我可以以什么方式改进这个脚本?

EN

回答 3

Stack Overflow用户

发布于 2012-08-09 18:13:38

如果可以的话,可以避免使用killall,因为在所有的UNIX平台上都没有一致的实现。加工工具‘ pkillpgrep更可取:

代码语言:javascript
复制
for procname; do
    pkill "$procname"
done

sleep 3
for procname; do
    # Why check if the process exists if you're just going to `SIGKILL` it?
    pkill -9 "$procname"
done

(编辑)如果您的进程应该在被杀死后重新启动,您可能不想盲目地杀死它们,所以您可以先收集PID:

代码语言:javascript
复制
pids=()
for procname; do
    pids+=($(pgrep "$procname"))
done
# then proceed with `kill`

也就是说,如果可以的话,您应该尽量避免使用SIGKILL。它不会给软件一个自我清理的机会。如果程序在收到SIGTERM后不立即退出,那么它可能在等待什么。找出它在等待什么(硬件中断?打开文件?)把它修好,你就可以让它干净地关闭。

票数 5
EN

Stack Overflow用户

发布于 2012-08-09 18:16:33

如果不了解这个过程到底要做什么,我会说它可能并不理想,因为您可能会遇到这样的情况:您正在杀死的进程实际上正在执行一些有用的关闭/清理工作。如果您的过程实际上是在编写数据的话,强制使用kill -9可能会导致短路,并可能导致损坏。

假设没有数据损坏的危险,并且短路关闭也没问题,你能不能在第一次kill -9这个过程并完成它。您是否可以访问您正在杀害的流程的开发人员,以了解可能阻止关闭发生的原因?这个过程可能是出于很好的理由而阻止了INT和术语。

票数 2
EN

Stack Overflow用户

发布于 2012-08-09 19:05:28

这是不太可能的,但它有可能在这3秒钟的等待,一个新的进程可能已经取代PID和第二个杀死将杀死它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11889425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档