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

7eumitmz  于 2023-01-26  发布在  Shell
关注(0)|答案(3)|浏览(142)

我正在寻找一个快速的终端命令,将杀死所有的进程正在运行从一个特定的目录(或该目录的子目录)。
例如,假设我运行bin1bin2可执行文件,它们位于以下路径:
/path/to/processes/subdir1/bin1
/path/to/processes/subdir2/subsubdir2/bin2
我想通过只指定/path/to/processes来同时终止bin1和bin2,这样命令就可以根据位置找到并终止bin1bin2

vfhzx4xs

vfhzx4xs1#

一种方法是说:

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

ubbxdtey2#

老问题我知道,但我遇到了这个寻找答案,并最终找到了一个。我不知道这是否是“最佳”的方式来做到这一点或没有,但你必须从某处开始,我发现这是非常可靠的:

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仅提取PID
  • while read line; do kill $line; done;:通过pid终止每个进程
koaltpgm

koaltpgm3#

我使用此命令来终止特定目录中的进程:

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

相关问题