如何杀死描述中包含“/var/”字符串的所有进程?

How to kill all processes which have '/var/' string in the description?

我正在使用 lsof 找出描述中包含 /var/ 的所有进程。

[root@localhost ~]# lsof | grep /var/ | less
systemd      1                          root  105u     unix 0xffff9b25fae49680      0t0      21311 /var/run/cups/cups.sock type=STREAM
systemd      1                          root  134u     unix 0xffff9b25f509cd80      0t0      21334 /var/run/libvirt/virtlogd-sock type=STREAM
systemd      1                          root  135u     unix 0xffff9b25fae49f80      0t0      21315 /var/run/.heim_org.h5l.kcm-socket type=STREAM
systemd      1                          root  137u     unix 0xffff9b25fae48d80      0t0      21318 /var/run/libvirt/virtlockd-sock type=STREAM
polkitd    745                       polkitd  mem       REG                8,3 10406312    2107847 /var/lib/sss/mc/initgroups
polkitd    745                       polkitd  mem       REG                8,3  6406312    2107846 /var/lib/sss/mc/group

我现在正尝试使用以下命令终止所有这些进程:

kill -9 $(lsof | grep /var/)

但是出现错误:

-bash: kill: root: arguments must be process or job IDs
-bash: kill: 8w: arguments must be process or job IDs
-bash: kill: REG: arguments must be process or job IDs
-bash: kill: 8,3: arguments must be process or job IDs

你想

  • 仅匹配 NAME 字段,并且
  • 只打印 pid,而不是整行:
lsof | awk -v pattern="/var/" ' ~ pattern {print }'

在我的系统上,这似乎输出了很多重复项:

lsof | awk -v pattern="/var/" ' ~ pattern {print }' | sort -u

并使用 xargs

传递要杀死的 pid 列表
lsof | awk -v pattern="/var/" ' ~ pattern {print }' | sort -u | xargs echo kill

如果您满意它按预期工作,请删除“echo”。