"ps" 명령에 대한 Unix 플래그 형식과 BSD 플래그 형식의 의미에 대해 혼란스럽습니다.

"ps" 명령에 대한 Unix 플래그 형식과 BSD 플래그 형식의 의미에 대해 혼란스럽습니다.

ps나는 이 명령이 두 가지 형식으로 플래그를 취할 수 있다는 것을 읽었습니다 .

  • 플래그 앞에 대시를 붙여야 하는 Unix 형식입니다.
  • 플래그 앞에 대시를 붙여서는 안 되는 BSD 형식입니다.

이제 동일한 플래그를 두 형식 모두에 사용할 수 있습니다. 예를 들어 다음 명령은 동일한 것을 의미합니까?

ps -x
ps x

아니면 Unix 형식에는 자체 플래그 세트가 있는 반면 BSD 형식에는 완전히 다른 플래그 세트가 있습니까?

답변1

그만큼맨페이지귀하의 질문에 답변해 드립니다:

다양한 유형의 옵션을 자유롭게 혼합할 수 있지만 충돌이 나타날 수 있습니다. 호환되는 많은 표준 및 ps구현 으로 인해 기능적으로 동일한 몇 가지 동의어 옵션이 있습니다 .ps

ps -aux와는 다르다는 점에 유의하세요 ps aux. POSIX 및 UNIX 표준에서는 ps -aux"x"라는 사용자가 소유한 모든 프로세스를 인쇄할 뿐만 아니라 옵션으로 선택되는 모든 프로세스도 인쇄해야 합니다 -a. "x"라는 사용자가 존재하지 않으면 이 ps는 대신 명령을 해석하여 ps aux경고를 인쇄할 수 있습니다. 이 동작은 이전 스크립트와 습관을 전환하는 데 도움을 주기 위한 것입니다. 깨지기 쉽고 변경될 수 있으므로 의존해서는 안 됩니다.

플래그는 다르지만 결합할 수 있습니다. 일반적으로 하나를 선택하지만,예를 들어또는 혼합이 ps aux아닌 ps -ef모든 프로세스의 세부 정보를 보려면

유일한 x플래그는 BSD 플래그이므로 동일한 결과를 생성합니다 ps x. ps -x하지만 두 변형 모두에 정의된 플래그에는 작동하지 않습니다.

이 모든 것은 특정procps그리고procps-ng. ps x와 의 동등성은 ps -x첫 번째 패스가 모든 인수를 완전히 구문 분석하지 못하는 경우 호출되는 "두 번째 기회" 구문 분석 단계의 결과입니다. 이것은 맨페이지에 문서화되어 있지 않지만HACKING소스 코드의 파일:

성격이 BSD 구문 분석을 강제하지 않는 한, parser.c는 명령줄을 혼합된 BSD+SysV+Gnu 엉망으로 구문 분석하려고 시도합니다. 실패하면 BSD 구문 분석이 시도됩니다. BSD 구문 분석에 실패한 경우~ 후에SysV 구문 분석이 시도되었습니다. 오류 메시지는 원래 SysV 구문 분석에서 나옵니다.

관련 정보