IMHO 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
:
/usr/share/doc/procps-3.2.8/FAQ
はあまり役に立ちません。重要な場合:
$ 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
正しい構文同じ出力を返すは次のようになります。
ps u
ps
の最新の構文が混乱しているのには十分な理由があります。歴史的に、互換性のないバージョンのps
が2つありました。先頭にダッシュが付いているオプションは、AT&T Unixバージョンのps
から継承されたものです。先頭にダッシュがないオプションは、BSDから継承されました。 Linuxディストリビューションが一般的に使用するps
のバージョンは、GNUで、両方のオプションのセットをマージし、先頭のdouble-で始まる独自のオプションのセットを追加しています。ダッシュ。
したがって、ps u
はBSDスタイルであり、ps -u $USER
はAT&Tスタイルです。 GNU ps
を使用するとps -u
を実行でき、警告以外はps u
と同じ出力が得られるという事実は、GNUは悪い状況を最大限に活用しようとしています。
ps
コマンドは、歴史的にBSDとSystem V Unixで非常に異なる構文を持っていました。
BSD ps
では、u
オプション(ダッシュなし)はパラメーターを取らず、追加の列とともに「ユーザー指向の出力」を表示します。
SunOS ps
では、-u
オプション(ダッシュ付き)はパラメーターとしてユーザー名を受け取り、そのユーザーが所有するプロセスのみを含みますが、表示形式は変更しません。
(別の非常に一般的な例として、BSD e
は「環境を表示」を意味し、SunOS -e
は、「全員のプロセスを表示する」を意味します。)
Linuxprocpsps
は両方のスタイルをサポートしようとします。したがって、「ダッシュ」オプションを使用する場合、-u
、拡張列オプションではなく、SunOSの「このユーザーをフィルタ」オプションではないと想定されます。 2つは頻繁に混同されますが、procpsが意図したことを実行しようとします–ユーザー名が欠落している場合、BSDオプションを指定したものの、SunOS構文を使用したと見なされます。
(実際にはps
には非常に多くの異なるバリアントがあり、procpsには「パーソナリティ」の実際のテーブルがあり、あいまいな動作を1つのスタイルまたは別のまたはさらに別の- "UNIX95"、 "CMD_ENV"、 "_ XPG"、 "I_WANT_A_BROKEN_PS" ...)のようなノブに加えて)