AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 66363
Accepted
Gant
Gant
Asked: 2009-09-18 10:14:24 +0800 CST2009-09-18 10:14:24 +0800 CST 2009-09-18 10:14:24 +0800 CST

Unix上正在运行的进程的环境变量?

  • 772

我需要解决一些与 Unix 系统上的环境变量相关的问题。

在 Windows 上,我可以使用 ProcessExplorer 之类的工具来选择特定的进程并查看每个环境变量的值。

我怎样才能在 Unix 上完成同样的事情?echoing和envcmd 只显示当前的值,但我想查看正在运行的进程当前使用的值。

linux
  • 13 13 个回答
  • 152821 Views

13 个回答

  • Voted
  1. Best Answer
    drAlberT
    2009-09-18T10:18:43+08:002009-09-18T10:18:43+08:00
    cat /proc/<pid>/environ
    

    如果您想拥有给定正在运行的可执行文件的 pid(s),您可以在许多其他可能性中使用pidof:

    AlberT$ pidof sshd   
    30690 6512 
    

    编辑:

    我完全引用了Dennis Williamson和Teddy的评论,以实现更易读的输出。我的解决方案如下:

    tr '\0' '\n' < /proc/<pid>/environ
    
    • 316
  2. Gerald Combs
    2009-09-18T12:47:12+08:002009-09-18T12:47:12+08:00

    由于这个问题有一个unix标签,而其他人在解决linux标签方面做得很好,你可以使用 OS X 和其他 BSD 派生系统获取此信息

    ps -p <PID> -wwwe
    

    或者

    ps -p <PID> -wwwE
    

    在 Solaris 上

    /usr/ucb/ps -wwwe <PID>
    

    /proc如果您不想记住晦涩的命令, Solaris 也支持该目录ps。

    • 63
  3. Lasse
    2009-10-30T03:27:45+08:002009-10-30T03:27:45+08:00

    正如其他人所提到的,在 Linux 上,您可以查看 /proc 但根据您的内核版本,有一个或两个限制:

    首先,environ 文件包含进程生成时的环境。这意味着进程可能对其环境所做的任何更改都不会在 /proc 中可见:

    $ cat /proc/$$/environ | wc -c
    320
    $ bash
    $ cat /proc/$$/environ | wc -c
    1270
    $ 
    

    第一个 shell 是一个登录 shell,最初有一个非常有限的环境,但通过采购例如 .bashrc 来扩展它,但 /proc 并没有反映这一点。第二个 shell 从一开始就继承了更大的环境,这就是它在 /proc 中显示的原因。

    此外,在较旧的内核上,environ 文件的内容仅限于页面大小(4K):

    $ cat /proc/$$/environ | wc -c
    4096
    $ env | wc -c
    10343
    $ 
    

    在 2.6.9 (RHEL4) 和 2.6.18 (RHEL5) 之间的某个地方,这个限制被删除了......

    • 26
  4. raincrumb
    2011-03-05T04:15:01+08:002011-03-05T04:15:01+08:00

    正确使用 BSD 选项来执行此操作(至少在 linux 上):

    ps e $pid
    

    或者

    ps auxe  #for all processes
    

    是的,ps 联机帮助页非常混乱。(通过)

    • 12
  5. Michael Renner
    2017-02-14T08:22:38+08:002017-02-14T08:22:38+08:00

    虽然文档很少,但 的内容/proc/<pid>/environ将仅包含用于启动该过程的环境。

    如果您需要检查进程环境的当前状态,一种方法是使用gdb.

    # Start gdb by attaching it to a pid or core file
    gdb <executable-file> <pid or core file>
    
    # Run the following script to dump the environment
    set variable $foo = (char **) environ
    set $i = 0
    while ($foo[$i] != 0)
    print $foo[$i++]
    end
    
    • 11
  6. kargig
    2009-09-18T10:19:36+08:002009-09-18T10:19:36+08:00
    cat /proc/PID/environ
    

    将 PID 替换为您要查看的进程的 PID。有关正在运行的进程的所有信息都在 /proc/PID/ 目录下

    示例:cat /proc/32512/environ

    • 7
  7. mwotton
    2015-01-14T15:05:03+08:002015-01-14T15:05:03+08:00

    取自Archlinux wiki:

    您可以创建一个临时函数来解析/proc/<pid>/environ. 在终端提示符下:

    envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }
    

    然后使用您想要的进程的pid,只需使用:

    envof <pid>
    
    • 7
  8. Joril
    2009-09-18T10:19:17+08:002009-09-18T10:19:17+08:00

    在Linux下,我会尝试看看

    /proc/<pid>/environ
    
    • 6
  9. Nikolai Novik
    2011-08-09T02:04:50+08:002011-08-09T02:04:50+08:00

    对于 Solaris 5.10,这有效:

    pargs -e <PID>
    
    • 6
  10. Corey S.
    2010-01-20T07:03:39+08:002010-01-20T07:03:39+08:00

    既然我的工作让我成为了一个 AIX 粉丝,让我们不要忘记:

    ps eww [pid]
    

    或者正如手册页所称,“伯克利标准”。

    无论出于何种原因,/proc/PID/environ 在 AIX 中都不存在。

    • 4

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve