如何在Solaris 中获得完整的进程列表而不截断行?

如何在Solaris 中获得完整的进程列表而不截断行?

有没有办法在Solaris中生成完整的进程列表,而不被截断行?我已经尝试过该ps命令,并带有以下参数:

  -f 生成完整列表。 (见下文
                      完整列表中各列的重要性 -
                      英。)
  -l 生成一个长列表。 (见下文。)

所以,这两者似乎都做了我想要的事情,但是,在 ps 手册页的更下方,我发现了这一点:

 
 args 该命令及其所有参数作为
                         细绳。实现可能会被截断
                         该值对应于字段宽度;这是
                         取决于实现是否有
                         发生进一步截断。这是
                         未指定是否为字符串
                         表示的是参数的一个版本
                         传递给命令时的列表
                         当它开始时,或者是一个版本
                         参数可能已被修改
                         通过应用程序。应用程序不能
                         取决于能否修改它们
                         参数列表并进行修改
                         化反映在 ps 的输出中。
                         Solaris 实现限制
                         字符串为 80 字节;该字符串是
                         参数列表的版本原样
                         启动时传递给命令。

这基本上意味着输出将被截断,而我对此无能为力。所以,我来这里。当然其他人也遇到过这个问题,甚至可能有解决方法。我猜 ps 无法做到这一点,所以我需要使用其他工具来做到这一点。准确吗?

答案1

你可以尝试

pargs <PID>

这给你所有参数的列表

或者使用其他ps。如果以 root 身份运行(或任何具有足够权限的用户)

/usr/ucb/ps auxww

会给你所有的论据。它是 SUNWscpu 的一部分,“源兼容性,(Usr)”

答案2

内核不需要跟踪命令行参数。当程序通过调用启动时,内核必须将参数复制到进程内存中(以便它们像在 C 程序中execve一样可用)。argv之后,内核可以丢弃用于存储初始命令行参数的内存。允许进程覆盖其参数副本。所以可能根本就没有争论的痕迹。

某些 UNIX 变体确实以某种形式保留参数的副本。 Solaris 以/proc/$pid.从 OpenSolaris 2009.06 开始,参数的唯一踪迹是在 中/proc/$pid/psinfo,它们之间用空格连接(因此您无法区分foo "one" "two"foo "one two"),并且生成的字符串被截断为 80 字节。该字段/proc/$pid/psinfo是列ps中打印的内容args

顺便说一下,-f-l选项控制打印哪些字段,而不是控制字段是否被截断到某个宽度。

答案3

ps -e给出所有正在运行的进程的列表。还有这个ps -elf

答案4

根据ps您使用的命令,我使用

ps -auxw

相关内容