如何终止从特定目录运行的所有进程?

时间:2013-10-17 17:15:57

标签: bash shell command-line kill

我正在寻找一个快速终端命令,它会杀死从特定目录(或该目录的子目录)运行的所有进程。

例如,假设我运行了bin1bin2个可执行文件。他们住在以下路径:

/path/to/processes/subdir1/bin1

/path/to/processes/subdir2/subsubdir2/bin2

我想通过仅指定/path/to/processes来杀死bin1和bin2,这样命令会找到并杀死bin1bin2因为它们的位置。

3 个答案:

答案 0 :(得分:0)

一种方法是说:

ps --no-headers axk comm o pid,args | awk '$2 ~ "/path/to/processes/"{print $1}' | xargs kill -9

答案 1 :(得分:0)

我知道一个老问题,但是我偶然发现了这个问题,并找到了答案。我不知道这是否是执行此操作的“最佳”方法,但是您必须从某个地方开始,我发现这非常可靠:

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:列出所有进程ID
  • while read line; do pwdx $line 2> /dev/null; done:获取有关每个进程的更多信息,包括运行该进程的目录
  • 2> /dev/null:删除有关您无权访问的进程的错误行(可选)
  • cut -d':' -f1仅提取pids
  • while read line; do kill $line; done;:通过pid杀死每个进程

答案 2 :(得分:0)

我使用此命令杀死特定目录中的进程:

lsof | grep '\/path\/to\/processes\/' | awk '{print $2}' | xargs kill