我正在寻找一个快速的终端命令,它将杀死从特定目录(或该目录的子目录)运行的所有进程。
例如,假设我正在运行bin1
和bin2
可执行文件。他们生活在以下路径:
/path/to/processes/subdir1/bin1
/path/to/processes/subdir2/subsubdir2/bin2
我想杀死 bin1 和 bin2 只指定/path/to/processes
这样的命令将找到并杀死两者bin1
,bin2
因为它们的位置。
我正在寻找一个快速的终端命令,它将杀死从特定目录(或该目录的子目录)运行的所有进程。
例如,假设我正在运行bin1
和bin2
可执行文件。他们生活在以下路径:
/path/to/processes/subdir1/bin1
/path/to/processes/subdir2/subsubdir2/bin2
我想杀死 bin1 和 bin2 只指定/path/to/processes
这样的命令将找到并杀死两者bin1
,bin2
因为它们的位置。
一种方法是说:
ps --no-headers axk comm o pid,args | awk '$2 ~ "/path/to/processes/"{print $1}' | xargs kill -9
我使用这个命令来杀死特定目录中的进程:
lsof | grep '\/path\/to\/processes\/' | awk '{print $2}' | xargs kill
我知道的老问题,但我在寻找答案时遇到了这个问题并最终找到了答案。我不知道这是否是执行此操作的“最佳”方式,但您必须从某个地方开始,我发现这非常可靠:
ps -eo pid | while read line; do pwdx $line 2> /dev/null; done | grep "your/path/here" | cut -d':' -f1 | while read line; do kill $line; done;
ps -eo pid
: 列出所有进程 IDwhile read line; do pwdx $line 2> /dev/null; done
: 获取有关每个进程的更多信息,包括运行它的目录2> /dev/null
:删除有关您无权访问的进程的错误行(可选)cut -d':' -f1
仅提取 pidwhile read line; do kill $line; done;
: 通过 pid 杀死每个进程