如何批量终止指定目录下的Python进程(排除bash进程)
如何终止指定目录下的所有Python会话(排除bash进程)
我在指定目录下运行了多个Python会话,执行
lsof test11/命令得到如下输出:lsof test11/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 5838 user1 cwd DIR 8,34 4096 19947539 test11 python 5840 user1 cwd DIR 8,34 4096 19947539 test11 python 5843 user1 cwd DIR 8,34 4096 19947539 test11 python 5845 user1 cwd DIR 8,34 4096 19947539 test11 python 5846 user1 cwd DIR 8,34 4096 19947539 test11 python 5847 user1 cwd DIR 8,34 4096 19947539 test11 bash 68363 user1 cwd DIR 8,34 4096 19947539 test11 python 68510 user1 cwd DIR 8,34 4096 19947539 test11请问如何通过简单的批处理脚本终止上述所有Python会话(排除bash进程)?
这事儿其实很简单,不用写复杂的脚本,直接用管道命令串起来就能搞定,给你几种实用的方式:
方式一:简洁精准的单命令写法
这条命令会直接筛选出所有把test11/作为当前工作目录的Python进程,提取它们的PID并发送终止信号,完全不会碰bash进程:
lsof -t -c python +D test11/ | xargs kill
给你拆解下参数:
-t:让lsof只输出进程PID,省去多余信息-c python:只匹配命令名为python的进程,直接排除bash+D test11/:匹配所有以test11/为工作目录的进程(包括子目录,如果你只需要当前目录,这个参数也完全适用)xargs kill:把前面输出的所有PID逐个传给kill命令,批量终止
方式二:更精准的目录匹配(非递归)
如果你担心+D会误杀子目录里的Python进程,可以用awk做更严格的筛选,只针对当前test11/目录的Python进程:
lsof test11/ | awk '$1 == "python" {print $2}' | xargs kill
这里awk会逐行处理lsof的输出,只保留第一列(命令名)是python的行,然后提取第二列的PID,再传给kill。
方式三:强制终止无响应的进程
如果有些Python进程卡住了,普通kill没效果,可以加上-9参数发送强制终止信号:
lsof -t -c python +D test11/ | xargs kill -9
⚠️ 注意:如果你不是root用户,只能终止自己名下的进程,这点要留意哦。
内容的提问来源于stack exchange,提问作者Hao
相关产品推荐
相关产品推荐

