web-dev-qa-db-ja.com

切り詰められた行なしで、solarisで完全なプロセスリストを取得するにはどうすればよいですか?

切り捨てられた行なしで、solarisで完全なプロセスリストを生成する方法はありますか?次の引数を指定してpsコマンドを試しました。

 -f完全なリストを生成します。 (完全なリストの列の重要性については、以下を参照してください-
 ing。)
 -l長いリストを生成します。 (下記参照。)

だから、どちらも私がやりたいことをしているようですが、psのmanページのさらに下のほうにあります。

 
 args 
文字列としてのすべての引数を持つコマンド。実装によっては、この値がフィールド幅に切り捨てられる場合があります
。それ以上
切り捨てが発生するかどうかは
実装依存です。表示された文字列
が、開始時にコマンド
に渡されたときの引数
リストのバージョンであるか、それともアプリケーションによって変更された可能性がある
引数
。アプリケーションは、
引数リストを変更できること、およびその変更
がps。
の出力に反映されることに依存することはできません
。Solarisの実装では、 
 80バイトまでの文字列。文字列は、コマンドの開始時にコマンドに渡された
バージョンの引数リストです。

これは基本的に出力が切り捨てられることを示しており、それについて私ができることは何もありません。だから、私はここに来ています。確かに他の人々がこの問題に遭遇し、おそらくそれを回避する方法さえあるでしょう。私はpsはそれを行うことができないと思いますので、これを行うには他のツールを使用する必要があります。それは正確ですか?

57
gabe.

あなたは試すことができます

pargs <PID>

これにより、すべての引数のリストが表示されます

または、他のpsを使用します。 rootとして実行する場合(またはそのことについて十分な特権を持つ任意のユーザー)

/usr/ucb/ps auxww

すべての引数を提供します。 SUNWscpuの一部である「ソース互換性(Usr)」

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のこのフィールドは、ps列にargsが出力するものです。

ちなみに、-fおよび-lオプションは、フィールドが特定の幅に切り捨てられるかどうかではなく、出力されるフィールドを制御します。

ps -eは、実行中のすべてのプロセスのリストを提供します。これもあるps -elf

2
ari

使用するpsコマンドに応じて、私は使用します

ps -auxw
0
Wes

prstatは、現在実行中のプロセスとそのPIDおよびCPU使用率を示します。

0
user41052