"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 -xHACKING소스 코드의 파일:

성격이 BSD 구문 분석을 강제하지 않는 한, parser.c는 명령줄을 혼합된 BSD+SysV+Gnu 혼란으로 구문 분석하려고 시도합니다. 실패하면 BSD 해결이 시도됩니다. BSD 구문 분석에 실패한 경우뒤쪽에SysV 구문 분석이 시도되었으며 오류 메시지는 원래 SysV 구문 분석에서 나온 것입니다.

관련 정보