用某个文件的句柄杀死所有进程的更好方法

Joh*_*uer 6 kill process-management files

这会使用文件 /foo/bar 的句柄(在 bash 中)杀死每个进程:

 lsof /foo/bar 2>&1 | grep "/foo/bar" | sed "s/  */\\t/g" | cut -f 2 | while read PID; do kill $PID; done
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个不常见的任务,不会有更简单的解决方案,所以我想知道是否有类似的东西killallkill我错过的切换到相同的东西。

Sté*_*las 8

-t就是为了。手册页甚至建议您将其用于kill.

lsof -t /some/file | xargs kill
Run Code Online (Sandbox Code Playgroud)

传统上(之前lsof),你会使用:

fuser /some/file 2> /dev/null | xargs kill
Run Code Online (Sandbox Code Playgroud)

为了那个原因。

一些fuser实现,比如大多数基于 Linux 的操作系统、Solaris 或最新的 FreeBSD 上的实现,甚至可以自己完成:

fuser -k /some/file
Run Code Online (Sandbox Code Playgroud)

但是请注意,他们发送的是 SIGKILL,而不是 SIGTERM。您可以-TERM使用某些实现和-s TERM其他实现选择不同的信号。