Có phải là ps ps -u thực sự là một cú pháp tồi?


75

IMHO ps -ucho thấy một đầu ra rất hữu ích, tốt hơn nhiều so với 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
:

so với

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. Nhưng, tại sao nó là "cú pháp xấu"? /usr/share/doc/procps-3.2.8/FAQkhông giúp được gì nhiều.
  2. Điều gì sẽ là một "cú pháp thích hợp" để đạt được cùng một đầu ra chính xác?

Trong trường hợp nó quan trọng:

$ 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
Và bây giờ cho phần khó khăn: Câu trả lời nào sẽ nhận được dấu kiểm?
sjngm

Thật ra tôi nghĩ tôi nên để bạn, người dùng quyết định. Một trong những upvote cao hơn sẽ nhận được nó. Nhưng, bạn sẽ không làm điều này dễ dàng hơn nữa;)
sjngm

6
khi cả hai câu trả lời đều tốt như nhau, tôi nâng cấp cả hai và đưa ra dấu kiểm cho người dùng có đại diện thấp hơn, đặc biệt là khi chênh lệch hơn 100k.
Frank Thomas

1
@FrankThomas đã hoàn thành :)
sjngm

Trên các hệ thống dựa trên SysV (hoặc các hệ thống psxuất phát từ dòng đó), tôi thường sử dụng ps -fu $USER... nhận ps -fđịnh dạng đầu ra có phần giống với ps uđịnh dạng, nhưng cũng nhận được điều chỉ định người dùng. Trong trường hợp bạn muốn cả hai cùng một lúc.
lindes-hw

Câu trả lời:


130

Cú pháp đúng, trả về cùng một đầu ra , sẽ là:

ps u

Có một lý do chính đáng tại sao cú pháp hiện đại cho pslà một mớ hỗn độn. Trong lịch sử, có hai phiên bản không tương thích ps. Tùy chọn với một dấu gạch ngang hàng đầu được thừa kế từ AT & T Unix phiên bản của ps. Các tùy chọn không có dấu gạch đầu dòng được kế thừa từ BSD. Phiên bản của các psbản phân phối Linux thường sử dụng là GNU đã hợp nhất cả hai bộ tùy chọn với nhau, cũng như thêm bộ tùy chọn riêng bắt đầu bằng dấu gạch ngang kép hàng đầu.

Do đó, ps ulà phong cách BSD và ps -u $USERlà phong cách AT & T. Thực tế là GNU pscho phép bạn chạy ps -uvà, ngoài cảnh báo, có cùng đầu ra như ps ucho thấy GNU đang cố gắng làm tốt nhất tình huống xấu.


Trên thực tế, không có lý do chính đáng cho sự lộn xộn. Có một vài cái xấu và sự phân đôi rõ ràng của "GNU" và "BSD" là một lời ngụy biện được đưa ra bởi một trang hướng dẫn Linux. Xem unix.stackexchange.com/a/511530/5132 .
JdeBP

84

Các pslệnh lịch sử đã có cú pháp cực kỳ khác nhau trong BSD và System V Unix.

  • Trong BSDps , utùy chọn (không có dấu gạch ngang) không có tham số và hiển thị "đầu ra hướng người dùng" với các cột bổ sung.

  • Trong SunOSps , -utùy chọn (có dấu gạch ngang) lấy tên người dùng làm tham số và chỉ bao gồm các quy trình do người dùng đó sở hữu, nhưng không thay đổi định dạng hiển thị.

(Như một ví dụ rất phổ biến khác, BSD ecó nghĩa là "môi trường hiển thị", trong khi SunOS -ecó nghĩa là "hiển thị các quy trình của mọi người".)

Linux Procps ps cố gắng hỗ trợ cả hai phong cách. Vì vậy, nếu bạn sử dụng tùy chọn 'dash' -u, nó sẽ hy vọng nó là tùy chọn "lọc người dùng" này của SunOS, chứ không phải tùy chọn cột mở rộng. Cả hai thường bị nhầm lẫn đủ thường xuyên, tuy nhiên, các Procps cố gắng làm những gì bạn có nghĩa là - nếu tên người dùng bị thiếu, nó sẽ cho rằng bạn đã cho nó một tùy chọn BSD nhưng sử dụng cú pháp SunOS.

(Đã có trên thực tế rất nhiều biến thể khác nhau của pscác procps có một bảng thực tế của "nhân vật" để buộc hành vi mơ hồ để được hiểu như là một phong cách này hay cách khác hoặc chưa khác - ngoài nút bấm như "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)


29
"I_WANT_A_BROKEN_PS" hah.

42
... Lúc đầu, tôi nghĩ đó là một trò đùa. Nhưng không ...
Izkata

9
Hmm, hóa ra, đây chính xác là tùy chọn để ẩn "cách sử dụng mơ hồ" những cảnh báo mà OP đang thấy.
grawity
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.