在Bash中如何检查特定用户是否运行了指定可执行程序的进程
解决lsof过滤特定用户进程无效的问题
问题出在lsof的参数顺序上:lsof要求过滤选项(比如-u)必须放在文件名前面,否则文件名会被优先处理,后面的过滤选项会被忽略。
你原来的命令把$(which python3)(目标文件路径)放在了-u前面,导致lsof先列出所有打开该文件的进程,完全没处理后面的用户过滤参数。
正确的命令写法
有两种可靠的方式:
- 把用户过滤选项放前面,用
-a(逻辑与)关联文件路径,确保两个条件同时满足:
lsof -u username -a $(which python3)
- 如果不需要精确匹配文件路径,用
-c按命令名过滤(更灵活,适配不同路径的python3):
lsof -u username -a -c python3
为什么之前加-a没用?
因为你还是把文件名放在了选项前面,lsof $(which python3) -a -u username这种写法里,lsof依然先处理文件名,-a和-u的组合不会作用到前面的文件名过滤上,必须把所有过滤选项前置,再用-a连接条件。
内容的提问来源于stack exchange,提问作者Jack1888
相关产品推荐
相关产品推荐

