Apakah "ps -u" Benar-benar Sintaks yang Buruk?

75

IMHO ps -umenunjukkan output yang sangat berguna, jauh lebih baik daripada 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
:

dibandingkan dengan

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. Tapi, mengapa itu "sintaks buruk"? /usr/share/doc/procps-3.2.8/FAQtidak banyak membantu.
  2. Apa yang akan menjadi "sintaksis yang tepat" untuk mencapai hasil yang sama persis?

Dalam hal ini penting:

$ 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
sjngm
sumber
5
Dan sekarang untuk bagian yang sulit: Jawaban mana yang harus mendapatkan tanda centang?
sjngm
Sebenarnya saya pikir saya harus membiarkan Anda, para pengguna, memutuskan. Yang dengan upvotes yang lebih tinggi harus mendapatkannya. Tetapi, Anda tidak membuat ini lebih mudah;)
sjngm
6
ketika kedua jawaban sama baiknya, saya membesarkan keduanya, dan memberikan tanda centang kepada pengguna dengan perwakilan yang lebih rendah, terutama ketika perbedaannya lebih dari 100k.
Frank Thomas
1
@FrankThomas selesai :)
sjngm
Pada sistem berbasis SysV (atau yang psberasal dari hal-hal itu), saya sering menggunakan ps -fu $USER... mendapatkan ps -fpemformatan keluaran yang agak mirip dengan ps upemformatan, namun juga mendapatkan hal yang menentukan pengguna. Jika Anda menginginkan keduanya pada saat yang sama.
lindes-hw

Jawaban:

130

Sintaks yang benar, yang mengembalikan output yang sama , adalah:

ps u

Ada alasan bagus mengapa sintaksis modern psadalah berantakan. Secara historis, ada dua versi yang tidak kompatibel ps. Opsi dengan tanda hubung utama diwarisi dari versi AT&T Unix dari ps. Opsi tanpa tanda hubung utama diwarisi dari BSD. Versi psdistribusi Linux yang umumnya digunakan adalah GNU yang telah menggabungkan kedua set opsi bersama, serta menambahkan set opsi sendiri yang dimulai dengan dash ganda terkemuka.

Jadi, ps ugaya BSD dan gaya ps -u $USERAT&T. Fakta bahwa GNU psmemungkinkan Anda untuk menjalankan ps -udan, selain dari peringatan, mendapatkan hasil yang sama seperti ps umenunjukkan bahwa GNU berusaha untuk membuat yang terbaik dari situasi yang buruk.

John1024
sumber
Sebenarnya, tidak ada alasan untuk kekacauan ini. Ada beberapa yang buruk, dan dikotomi "GNU" dan "BSD" yang diakui adalah kekeliruan yang dikemukakan oleh halaman manual Linux. Lihat unix.stackexchange.com/a/511530/5132 .
JdeBP
84

The psperintah historis memiliki sintaks yang sangat berbeda di BSD dan Sistem V Unix.

  • Dalam BSDps , uopsi (tanpa tanda hubung) tidak mengambil parameter dan menunjukkan "output yang berorientasi pengguna" dengan kolom tambahan.

  • Di SunOSps , -uopsi (dengan tanda hubung) mengambil nama pengguna sebagai parameter dan hanya menyertakan proses yang dimiliki oleh pengguna itu, tetapi tanpa mengubah format tampilan.

(Sebagai contoh yang sangat umum, BSD eberarti "tampilkan lingkungan", sedangkan SunOS -eberarti "tampilkan proses semua orang".)

Linux procps ps mencoba mendukung kedua gaya tersebut. Jadi jika Anda menggunakan opsi 'dash' -u, itu akan menjadi SunOS "filter this user", bukan opsi kolom yang diperluas. Keduanya cukup sering bingung, bagaimanapun, bahwa procps mencoba Melakukan Apa yang Anda Inginkan - jika nama pengguna hilang, itu akan menganggap Anda memberinya opsi BSD tetapi menggunakan sintaks SunOS.

(Sebenarnya ada begitu banyak varian yang berbeda dari psyang procps memiliki tabel sebenarnya "kepribadian" untuk memaksa perilaku ambigu ditafsirkan sebagai satu gaya atau yang lain atau yang lain - selain tombol-tombol seperti "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)

grawity
sumber
29
"I_WANT_A_BROKEN_PS" hah.
42
... Awalnya, kupikir itu lelucon. Tapi tidaaaak ...
Izkata
9
Hmm, ternyata, ini adalah opsi tepat untuk menyembunyikan "penggunaan ganda" peringatan yang dilihat OP.
grawity