"ps -u"가 실제로 나쁜 구문입니까?


75

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
:
  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

6
두 대답이 똑같이 좋으면 두 가지를 모두 높이고 특히 차이가 100k를 초과하는 경우 더 낮은 응답으로 사용자에게 확인 표시를합니다.
Frank Thomas

1
@FrankThomas done :)
sjngm

시스템 V 기반 시스템 (또는 사람 누구에 ps일의 라인에서 유래), 내가 자주 사용하는 ps -fu $USER점점 ... ps -f다소 비슷한 출력 서식 ps u서식, 아직 또한 지정-A-사용자가 일을 점점. 동시에 둘 다 원했을 경우.
lindes-hw

답변:


130

동일한 출력을 반환하는 올바른 구문 은 다음과 같습니다.

ps u

현대 구문 ps이 엉망인 이유 는 충분합니다. 역사적으로의 호환되지 않는 버전이 두 개있었습니다 ps. 선행 대시가있는 옵션은의 AT & T Unix 버전에서 상속되었습니다 ps. 선행 대시가없는 옵션은 BSD에서 상속되었습니다. psLinux 배포판 의 버전은 일반적으로 사용되는 GNU이며, 두 옵션 세트를 함께 병합하고 선행 이중 대시로 시작하는 고유 한 옵션 세트를 추가했습니다.

따라서 ps uBSD 스타일이며 ps -u $USERAT & T 스타일입니다. GNU 가 경고를 제외하고 ps실행할 수 있다는 사실은 GNU 가 나쁜 상황을 최대한 활용하려고한다는 것을 보여주는 ps -u것과 동일한 결과를 얻습니다 ps u.


사실, 혼란의 이유는 없습니다. 몇 가지 나쁜 점이 있으며 "GNU"와 "BSD"의 이분법은 Linux 매뉴얼 페이지에 의해 틀린 오류입니다. unix.stackexchange.com/a/511530/5132를 참조하십시오 .
JdeBP

84

ps명령은 역사적으로 BSD와 System V Unix에서 구문이 크게 다릅니다.

  • 에서 BSDpsu옵션 (NO 대시) 어떤 매개 변수를 사용하지 않고 추가 열은 "사용자 중심의 출력을"보여줍니다.

  • 에서 SunOS의ps-u옵션 (대시) 매개 변수로 이름을 취하고뿐 아니라, 표시 형식을 변경하지 않고 그 사용자가 소유 한 프로세스가 포함되어 있습니다.

또 다른 매우 일반적인 예인 BSD e는 "쇼 환경"을 -e의미 하고 SunOS 는 "모두의 프로세스 표시"를 의미합니다.

Linux procps ps 는 두 가지 스타일을 모두 지원하려고합니다. 당신이 '대시'옵션을 사용한다면 -u, 그것은 SunOS의 "필터이 사용자"옵션 것으로 기대 하지 확장 열 옵션을 선택합니다. 그러나 둘은 자주 혼동되기 때문에 procps 는 사용자가 원하는 일을 시도합니다. 사용자 이름이 누락 된 경우 BSD 옵션을 제공했지만 SunOS 구문을 사용했다고 가정합니다.

(실제로 많은 종류 psprocp 가 모호한 행동을 하나의 스타일 또는 다른 스타일로 해석하도록 "실제"테이블이 있습니다. "UNIX95", "CMD_ENV"와 같은 노브 외에도 "_XPG", "I_WANT_A_BROKEN_PS"...)


29
"I_WANT_A_BROKEN_PS"

42
... 처음에는 농담이라고 생각했습니다. 그러나 nooooo ...
Izkata

9
흠, 이것은 OP 가보고있는 경고를 "모호한 사용법"을 숨기는 정확한 옵션입니다.
grawity
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.