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

如何打印所有运行进程的用户名及umask值?现有命令需补充用户名输出

同时输出进程用户名与Umask值的解决方案

你可以通过以下几种方式改进原有命令,实现同时输出用户名和对应的Umask值:

方法一:循环读取用户名与PID

ps gaux | awk '{print $1, $2}' | while read user pid; do
    umask_val=$(grep -i Umask /proc/$pid/status | awk '{print $2}')
    echo "$user $pid $umask_val"
done
  • 先用awk '{print $1, $2}'从ps gaux的输出中提取用户名(第一列)和PID(第二列)
  • 通过while read user pid同时读取这两个字段
  • 从/proc/$pid/status中过滤出Umask值,最后将用户名、PID和Umask值一起打印

如果想避免无权限读取进程文件时的错误提示,可以添加权限判断:

ps gaux | awk '{print $1, $2}' | while read user pid; do
    if [ -r "/proc/$pid/status" ]; then
        umask_val=$(grep -i Umask /proc/$pid/status | awk '{print $2}')
        echo "$user $pid $umask_val"
    else
        echo "$user $pid 无权限读取进程信息"
    fi
done

方法二:用Awk一次性处理(避免循环)

ps gaux | awk '{
    cmd = "grep -i Umask /proc/" $2 "/status"
    if ((cmd | getline umask_line) > 0) {
        split(umask_line, umask_arr)
        print $1, $2, umask_arr[2]
    } else {
        print $1, $2, "无法获取Umask"
    }
    close(cmd)
}'
  • Awk内部直接调用grep命令获取对应PID的Umask行
  • 用getline读取命令输出,判断是否成功获取内容
  • 拆分Umask行得到具体值后,和用户名、PID一起输出
  • 用close(cmd)关闭命令管道,避免资源泄漏

内容的提问来源于stack exchange,提问作者thebjorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:12