我开发了一个脚本,它可以终止所有正在处理xxx.log文件的'vim'进程:
ps -ef|grep vim|grep xxx.log|awk '{print $2}'|xargs kill -9
然而,每个被中止的vim实例都会留下.swp(交换)文件。
我该如何在同一个脚本中删除交换文件,或者有其他一些简短的解决方案而无需搜索交换位置等?
将kill
命令中的 -9
去掉; 这会向Vim发送TERM
(终止)信号,使其清理并删除交换文件(至少在Ubuntu上是这样的)。
使用-9
/ KILL
命令,您不会给该进程清理的机会。这只应该用于绝对必要的情况下(例如,当进程挂起或陷入无限循环并且不再响应外部信号时)。
SIGKILL
或别名-9
时,你必须阅读最后的注释,它表示它不允许进程正常完成,因此如果你读了这个并这样做了,几个月后你会再次提出问题。 - Luis Colorado由于交换文件包含您删除的名称,因此您也应该能够通过适当的操作找到它。
然而,像 vim
这样的交互式编辑器被强制关闭听起来很不对。您真的应该考虑不要这样做。在什么情况下才需要这样做呢?
标签。
set noswapfile
pgrep
是ps -ef|grep vim
的正确方式。此外,fuser
是查找打开文件的进程的更好方法。(尽管您必须在交换文件上调用fuser
,因为 VIM 并不总是一直保持编辑文件处于打开状态。)lsof -p <pid> | grep REG | grep xxx.log
是另一种选择。 - Dummy00001SIGKILL
信号的内容吗?SIGKILL
不允许进程安装自定义信号处理程序,因此它总是在不给程序关闭文件、删除临时文件等机会的情况下杀死程序。尝试另一个信号(值为15的 SIGTERM),尝试使用kill -15
(或者只是kill
,因为它是默认值)而不是kill -9
。顺便问一下,你在哪里读到有关信号和-9
特殊值的内容(你没有全部阅读)? - Luis Coloradorm
了.swp
文件,则会破坏恢复这些文件的可能性。那是一个危险的事情。 - Luis Colorado