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


57

solarisに完全なプロセスリストを生成する方法はありますか?ps次の引数を使用してコマンドを試しました。

  -f完全なリストを生成します。(以下を参照
                      完全なリストの列の重要性
                      ing。)
  -l長いリストを生成します。(下記参照。)

だから、それらは両方とも私が望むことをするようですが、ps manページのさらに下に、私はこれを見つけます:

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

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


psコマンドについて話しているのですか?その場合は、より明確になるように質問を更新してください。
プネヘヘ

ええ、ごめんなさい...私の最初のいじくりはpsコマンドでした、私は質問をより明確にしました。
ガベ。

回答:


63

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

pargs <PID>

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

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

/usr/ucb/ps auxww

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


pargsコマンドライン引数(およびオプションで環境)のインプロセスコピーを表示します。知っていただきありがとうございます!
ジル「SO-悪であるのをやめる」

1
この/ usr / ucbディレクトリ全体は私にとって新しいものです...私はそれが好きです!
ガベ。

3
Solaris 11では、ダッシュなしのオプション(「/ usr / bin / ps auxwww」など)を使用すると、それらはUCBスタイルオプションとして扱われ、rootとして実行していない場合でも、出力に余分な長い行が表示されます。これはあまり公表されていません。参照:superuser.com/questions/148271/ps-command-in-solaris
クリスクエネル

14

カーネルは、コマンドライン引数を追跡する必要はありません。execve呼び出しによってプログラムが開始されると、カーネルは引数をプロセスメモリにコピーする必要があります(argvたとえば、Cプログラムのように使用できるように)。その後、カーネルは初期コマンドライン引数を保存するために使用されたメモリを破棄できます。プロセスは、引数のコピーを上書きできます。したがって、単に引数の痕跡がない場合があります。

一部のUNIXバリアントは、何らかの形式で引数のコピーを保持します。Solarisは、いくつかのデータをに公開し/proc/$pidます。OpenSolaris 2009.06の時点で、引数の唯一のトレースはin /proc/$pid/psinfoであり、その間にスペースが連結され(したがって、foo "one" "two"とを区別できないfoo "one two")、結果の文字列は80バイトに切り捨てられます。このフィールド/proc/$pid/psinfopsargs列に印刷されるものです。

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


これも非常に有益な答えでした。pargsコマンドは私のニーズをよりよく満たしてくれたので、これがこの答えよりもその答えを選んだ唯一の理由です。
ガベ。

6
だから、再び2013年にここに座って、1970年代に80文字の端末しかなかったため、文字列を80バイトに切り詰めました。「一部の」プログラムは、人生が進んでいるという事実をまだ理解していません。そして、私たちはそれが好きです、私たちはこれを「互換性」として賞賛します!私たちは自分自身を恥じるべきです
...-マンジャベス

1
@Manjabesハハ!Solarisを使い続けることを選択した人は、システムが昔ながらのやり方で物事を行っていることに文句を言うべきではありません;-) Solarisは意図的に変更が遅く、特定の動作を期待する古いプログラムとの後方互換性があります。ユーティリティプログラムでより長いpsリストとより高度な機能を備えたOSが必要な場合は、代わりにLinuxを使用できます。
-JohnGH


0

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

ps -auxw

1
auxw引数を使用するSolaris上のpsのバージョンでは、先頭に「-」は必要ありません。Solarisを使用していない場合、答えは関係ありません。
JohnGH

0

prstat 現在実行中のプロセスとそのpidおよびCPU使用率が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.