5

如何在 Solaris 中扩展 ps -fe 的输出,使其显示超过 80 个字符?我的进程有几个参数,无法再显示进程名称。

4

6 回答 6

9

You can't display them with the default ps (/usr/bin/ps) which is a SVR4 regular one.

To get the full argument line, use the BSD ps (UCB = University of California at Berkeley):

/usr/ucb/ps -alxwww
于 2011-04-08T05:36:54.150 回答
3

我们终于在 Solaris 中解决了这个问题;从 Solaris 11.3 SRU 5 开始,可以从 /proc 检索所有原始参数向量以及环境变量。ps 现在将打印所有命令行。

已在 Solaris 11.3 SRU 5 中修复

于 2016-02-22T13:59:51.177 回答
2

简单的答案是,对于其他用户拥有的进程,无法可靠地获取 Solaris 上进程的完整参数。如果您有 root 或其他特权访问权限,您可以在旧版本上使用 /usr/ucb/ps,在新版本上使用“pargs”或类似工具(没有适用于所有版本的工具)。

本质上,Solaris 在进程启动时存储原始 args,而大多数其他平台允许 ps 通过某种方式在进程运行时访问 argv 的内容。此存储副本位于一个特殊的内核数据结构中,大小有限(80 字节)。这也意味着程序不可能在启动后修改 ps 显示的 args 以获得有用或邪恶的手段。

因此,如果您需要访问命令行以实现可移植目的,例如 pid 检查,您将需要在通过诸如启动程序控制的没有绝对路径的 execp 路径之类的技巧来强制执行短命令行之间进行选择,或者您将需要放弃该可移植Solaris 上的功能。

于 2015-04-06T04:27:42.493 回答
1

你可以使用 pargs PID 它会给你比 ps 更多的信息

于 2014-01-14T06:07:15.120 回答
0

试试ps -efl。如果这不起作用(我手边没有 Solaris 盒子),您也可以尝试ps -efl | cat(因为某些程序会检查它们是否正在输出到终端以决定它们的输出宽度)。

于 2011-04-08T08:57:40.143 回答
0

ps 有两组可用的选项。其他人会使用正确的名称((可能是 BSD 和 SRVn)?)

使用 non-options-preceded-with-a-hyphen-version,你可以做

ps auxww(w?) | grep ${PID} 延长打印的命令详细信息的长度(再次注意没有前导“-”选项指示符)。

请注意,在某些情况下,您会在实际命令之前看到很多环境变量分配,即 myPath=... cfgFile=... /path/to/command ... args ...

我认为某些系统中的“www”会打印所有内容,无论命令有多长。

最后,根据我使用 ps 做很多疯狂事情的​​经验,我偶尔会有一个 PID,输出会显示前 6 个?列,但为命令保留的空间为空或具有某种占位符值。通过搜索 comp.unix.shell,我最终发现了为什么这是真的,但现在还不能确定,而且我现在无法访问 Solaris 系统。

我希望这有帮助。

于 2011-04-08T02:27:25.027 回答