linux 从其他选项卡干净地杀死所有Vim进程

iyzzxitl  于 2023-11-17  发布在  Linux
关注(0)|答案(2)|浏览(235)

我使用以下Linux命令杀死所有Vim进程,

ps -ef | grep "gvim" | grep -v grep | awk '{print $2}' | xargs kill

字符串
上面的命令是工作,但它输出:

Vim: Caught deadly signal TERM


有没有其他干净的方法杀死它?

abithluo

abithluo1#

只要你不介意丢失所有未保存的更改并中途停止任何后台作业,你可以使用-s选项从kill命令发送不同的信号。信号15SIGTERM是默认的;你可以执行kill -s 9彻底杀死进程。这里有一个很好的list of signals供参考。
所以你的最终命令看起来像这样:

ps -ef | grep "gvim" | grep -v grep | awk '{print $2}' | xargs kill -s 9

字符串
这不会产生任何关于致命信号的警告。这也是一种非常讨厌的做法,如果你有一个不平凡的Vim设置,可能会导致一些棘手的行为。
正如@moopet在评论中所说的,如果你将命令的输出重定向到/dev/null,你仍然可以使用SIGTERM。这不会比SIGKILL好到哪里去,因为Vim不会自动保存你的文件,但它可能会给给予它正在做的任何后台任务一些时间来清理。
或者,如果你愿意改变你的设置,你可以把Vim作为一个服务器运行,并从终端向它发出保存和关闭命令。

64jmpszr

64jmpszr2#

我用这个来找到并杀死Vim进程。

ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9

字符串
下面是上面命令中每个步骤的细分:
ps axuw #列出您PC上的所有进程。
grep vim #仅列出运行Vim的进程。
grep -v grep #删除包含“grep”的进程,“-v”选项显示与指定模式不匹配的行。
awk '{print $2}' #打印Vim进程的进程id,
第二列.“* awk”-允许传递命令(例如:print)。“$2”是传递给打印第二列的参数,因为它实际上是“print”命令返回的结果集中的第二个参数。在“awk”中,您还可以设置一个模式,以确保该命令仅适用于遵循它的进程(例如:awk '/manager/ {print}' employee.txt;它只会打印标题为“经理”的员工(不确定它是在寻找精确匹配还是只是一个关键字,不过;请随时测试它)。
xargs kill -9 #终止进程;构建并执行通过标准输入提供的命令;“-9“是'
kill *'信号的索引。要查找信号编号,请运行kill -l命令

相关问题