gab*_*be. 60 process solaris ps
有没有办法在solaris中生成完整的进程列表,而不会被截断?我试过ps
命令,有以下参数:
-f 生成完整列表。(见下文 完整列表中列的重要性- ing。)
-l 生成一个长列表。(见下文。)
所以,那些似乎都在做我想做的事,但是,在 ps 手册页的更深处,我发现:
args 命令及其所有参数作为 细绳。实现可能会截断 这个值到字段宽度;这是 依赖于实现的是否有 发生进一步截断。这是 未指定是否为字符串 表示的是参数的一个版本 列表,因为它被传递给命令 当它开始时,或者是 参数,因为它们可能已被修改 通过应用程序。应用程序不能 取决于能够修改他们的 参数列表并进行修改 将反映在 ps 的输出中。 Solaris 实现限制了 字符串到 80 个字节;字符串是 参数列表的版本 开始时传递给命令。
这基本上是说输出将被截断,我对此无能为力。所以,我来了。当然,其他人也遇到过这个问题,甚至可能有办法解决它。我猜 ps 做不到,所以我需要使用其他工具来做到这一点。那是准确的吗?
Mar*_*l G 66
你可以试试
pargs <PID>
Run Code Online (Sandbox Code Playgroud)
这为您提供了所有参数的列表
或者使用其他ps。如果以 root 身份运行(或任何具有足够权限的用户)
/usr/ucb/ps auxww
Run Code Online (Sandbox Code Playgroud)
会给你所有的论据。它是 SUNWscpu 的一部分,“Source Compatibility, (Usr)”
Gil*_*il' 14
内核不需要跟踪命令行参数。当程序通过execve
调用启动时,内核必须将参数复制到进程内存中(例如,这样它们就可以像argv
在 C 程序中一样使用)。之后,内核可以丢弃用于存储初始命令行参数的内存。允许进程覆盖其参数副本。所以可能根本就没有争论的痕迹。
一些 unix 变体确实以某种形式保留了参数的副本。Solaris 在/proc/$pid
. 从 OpenSolaris 2009.06 开始,参数的唯一痕迹是 in /proc/$pid/psinfo
,它们之间用空格连接(因此您无法区分foo "one" "two"
和foo "one two"
),并且生成的字符串被截断为 80 个字节。这个字段/proc/$pid/psinfo
是列中ps
打印的内容args
。
顺便说一下,-f
和-l
选项控制打印哪些字段,而不是字段是否被截断到某个宽度。