「ps -u」は本当に悪い構文ですか?


75

私見ps -uは非常に有用な出力を示しますps -u $USER

$ ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
elastic   234897  0.0  0.0 105980  1336 pts/2    S+   Oct10   0:00 /bin/bash ./run.sh collector-json-1.conf
elastic   234899 48.7  7.1 10087120 4433104 pts/2 Sl+ Oct10 2804:11 /usr/java/jdk1.7.0_09_x64/bin/java -Xmx6144m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatin
:

に比べ

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. しかし、なぜ「悪い構文」なのでしょうか?/usr/share/doc/procps-3.2.8/FAQあまり役に立たない。
  2. まったく同じ出力を達成するための「適切な構文」は何でしょうか?

重要な場合:

$ uname -a
Linux h22k34.local 2.6.32-042stab044.17 #1 SMP Fri Jan 13 12:53:58 MSK 2012 x86_64 x86_64 x86_64 GNU/Linux

5
そして今、難しい部分として、どの答えがチェックマークを取得する必要がありますか?
sjngm

実際、私はあなたに、ユーザーに決定させるべきだと思いました。より高い賛成票を持っている人はそれを手に入れるべきです。しかし、あなたはこれを簡単にすることはありません;)
sjngm 14年

6
両方の回答が同等に良い場合、私は両方に賛成し、特に差が100kを超える場合は、より低い担当者のユーザーにチェックマークを付けます。
フランクトーマス

1
@FrankThomas完了:)
sjngm 14年

SysVベースのシステム(またはpsそのラインから派生したシステム)では、頻繁に使用しps -fu $USERます... ps -f書式設定に多少類似した出力書式設定をps u取得しますが、ユーザー指定も取得します。両方を同時に使用したい場合。
lindes-hw 14年

回答:


130

同じ出力を返す正しい構文は次のとおりです。

ps u

の最新の構文psが混乱しているのには十分な理由があります。歴史的に、互換性のないバージョンが2つありましたps。先頭にダッシュが付いたオプションは、AT&T Unixバージョンのから継承されましたps。先頭にダッシュがないオプションは、BSDから継承されました。psLinuxディストリビューションの一般的なバージョンはGNUであり、GNUは両方のオプションセットをマージし、先頭の二重ダッシュで始まる独自のオプションセットを追加しました。

したがって、ps uBSDスタイルでps -u $USERあり、AT&Tスタイルです。GNU psが実行を許可しps -u、警告以外の出力が得られるという事実ps uは、GNUが悪い状況を最大限に活用しようとしていることを示しています。


実際、混乱の正当な理由はありません。いくつかの悪いものがありますが、「GNU」と「BSD」の二分法は、Linuxのマニュアルページで説明されている誤りです。unix.stackexchange.com/a/511530/5132を参照してください。
JdeBP

84

このpsコマンドは、歴史的にBSDとSystem V Unixで大きく異なる構文を持っていました。

  • ではBSDpsuオプション(なしダッシュ)は、パラメータをとらず、追加の列を持つ「ユーザー志向の出力」が表示されます。

  • SunOSps-uオプションが(ダッシュ)をパラメータとしてユーザ名を取り、だけでなく、表示形式を変更せずに、そのユーザーが所有するプロセスを含んでいます。

(別の非常に一般的な例として、BSD eは「環境を表示」を-e意味し、SunOS は「全員のプロセスを表示」を意味します。)

Linux procps psは両方のスタイルをサポートしようとします。したがって、「ダッシュ」オプションを使用する場合、拡張列オプション-uはなく、SunOSの「このユーザーをフィルター」オプションであると想定されます。この2つは頻繁に混同されますが、procpsはユーザーが意図したことを実行しようとします。

(実際psprocpsには実際の「パーソナリティ」テーブルがあり、曖昧な動作を「UNIX95」、「CMD_ENV」などのノブに加えて、あるスタイルまたは別のスタイルとして解釈するよう強制します。 「_XPG」、「I_WANT_A_BROKEN_PS」...)


29
「I_WANT_A_BROKEN_PS」ははは。

42
...最初は、それは冗談だと思った。 しかし、nooooo ...
Izkata

9
うーん、判明したように、これはOPが表示している警告の「あいまいな使用」を隠すためのオプションです。
悲しみ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.