如何获取PM2进程的完整用户名以执行pm2 list命令
如何获取PM2进程的完整用户名以执行pm2 list命令
我来帮你解决这个问题,核心是要拿到PM2进程对应的完整用户名,而不是被ps命令默认输出截断的短格式(比如usern+、use+),下面给你几种可行的方法:
方法1:调整ps输出格式,直接显示完整用户名
默认情况下ps的USER列宽度有限,长用户名会被截断。我们可以用ps的-o选项自定义输出列的宽度,强制显示完整用户名:
ps -eo user:32,pid,cmd | grep "[P]M2"
这里的user:32表示把用户名列的宽度设置为32个字符,足够容纳绝大多数用户名。执行后你就能看到完整的用户名,比如username1、username2,而不是被截断的格式。
方法2:通过PID单独提取完整用户名
如果已经拿到了PM2进程的PID,也可以针对每个PID单独查询完整用户名,这种方式更精准:
- 先获取所有PM2进程的PID:
pgrep -f "PM2" - 遍历这些PID,提取对应的完整用户名:
pgrep -f "PM2" | while read pid; do full_user=$(ps -p "$pid" -o user=) echo "PM2进程PID $pid 对应的完整用户名:$full_user" done
方法3:一键遍历所有PM2用户并执行pm2 list
结合上面的方法,我们可以直接写一段命令,自动获取所有PM2进程的唯一用户,然后逐个用runuser执行pm2 list:
ps -eo user:32,cmd | grep "[P]M2" | awk '{print $1}' | sort -u | while read user; do echo "=== 正在获取用户 $user 的PM2进程列表 ===" runuser -l "$user" -c "pm2 list" echo "" done
这里用sort -u对用户名去重,避免同一个用户有多个PM2进程时重复执行命令。
关于你遇到的错误解释
你之前尝试的user:[length]是**BSD风格ps**的语法,但你的系统大概率用的是System V风格的ps(大部分Linux发行版默认采用这种),所以会提示“unsupported option”。改用上面的-o user:width写法就能兼容你的系统了。
备注:内容来源于stack exchange,提问作者palmasd1
相关产品推荐
相关产品推荐

