it-swarm.cn

如何在solaris中获得完整的进程列表,而没有截断的行?

有没有一种方法可以在solaris中生成完整的过程清单,而不会出现断线?我尝试了ps命令,并带有以下参数:

 -f生成完整列表。 (请参阅下文,了解
完整列表中各列的重要性。)
 -l生成长列表。 (见下文。)

因此,这两者似乎都可以满足我的要求,但是在ps手册页中,我发现了这一点:

 
 args该命令及其所有参数均为
字符串。实现可以将
截断为字段宽度;是否
进一步的截断是否发生取决于
实现。不确定
表示的字符串
是参数
列表在启动时传递给命令
的版本还是版本。 
参数,因为它们可能已被应用程序修改
。应用程序不能
依赖于能够修改其
参数列表,并不能将其修改内容反映在ps的输出中。
 Solaris实现限制了
字符串为80个字节;该字符串是参数列表的
版本,因为它是在启动时传递给命令的
。

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

57
gabe.

你可以尝试

pargs <PID>

这为您提供了所有参数的列表

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

/usr/ucb/ps auxww

会给你所有的争论。 SUNWscpu的一部分,“源兼容性,(苏联)”

62
Marcel G

不需要内核来跟踪命令行参数。通过execve调用启动程序时,内核必须将参数复制到进程内存中(例如,它们将在C程序中以argv的形式提供)。之后,内核可以丢弃用于存储初始命令行参数的内存。允许进程覆盖其参数副本。因此,可能根本就没有论据的痕迹。

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

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

14

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

2
ari

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

ps -auxw
0
Wes

prstat将为您提供当前正在运行的进程及其pid和CPU利用率。

0
user41052