You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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单独查询完整用户名,这种方式更精准:

  1. 先获取所有PM2进程的PID:
    pgrep -f "PM2"
    
  2. 遍历这些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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:34:41