ps의 COMMAND 열에 있는 "init [2]"는 무엇을 의미합니까?

ps의 COMMAND 열에 있는 "init [2]"는 무엇을 의미합니까?

읽다프로세스 주변의 괄호는 무엇을 의미하나요?내가 아는 한 실행 파일 이름이 인쇄됩니다.

리눅스메모매뉴얼 페이지:

프로세스 매개변수를 사용할 수 없는 경우도 있습니다. 이 경우 ps는 실행 파일 이름을 괄호 안에 인쇄합니다.

그러나 ps -Awwo pid,comm,args나는 다음을 얻습니다.

  PID COMMAND         COMMAND
    1 init            init [2]

무슨 뜻이에요? "실행 파일 이름" init은 또는 이어야 합니까 [2]?

실행 파일은 물론인 것 같습니다 init. 그게 무엇인가요 [2]? 왜 인쇄되어 있습니까?

(또한 실행 파일 이름을 알고 있는데 왜 전체 경로를 표시할 수 없는지 정말 이해가 되지 않습니다.)

답변1

관련된 모든 사람이 기본 규칙을 따르는 경우 출력 열과 comm열의 첫 번째 단어 모두 실행 프로그램의 이름을 표시합니다. 그러나 다양한 이유로 차이가 발생할 수 있습니다.argsps

프로그램이 시작되면 args해당 열에 표시된 명령 이름이 선택되어 argv[0]프로그램을 실행하는 상위 프로그램에 의해 인수( )로 전달됩니다. 규칙에 따라 부모는 실행 파일의 기본 이름(즉, 디렉터리 부분이 없는 실행 파일의 경로)을 선택하지만 이는 필수는 아닙니다. 프로그램이 실행되면 문자열을 덮어쓸 수 있습니다.

Init(적어도 기존 Linux SysVinit)는 이를 재정의하여 argv[0]현재 상태를 나타냅니다.런레벨.

Linux에서 이 comm열은 처음에 실행 파일 기본 이름의 처음 16자로 커널에 의해 채워집니다. 프로세스에 따라 내용이 변경될 수 있음prctl시스템 호출.

실행 파일의 이름이 바뀌거나 삭제되면 comm열이나 args열 모두 이를 반영하지 않습니다.

ps작업 설명에 없는 실행 파일의 경로를 표시하지 않습니다. lsof난 너에게 말할 수있어 lsof -a -p 1 -d txt.

Linux에서는 다음 파일에서 이 정보를 볼 수 있습니다./proc/PID/

  • (괄호 안의 두 번째 필드) 및 comm(필드)의 프로세스 이름(필드)입니다./proc/1/stat/proc/1/statusName
  • 전달된 실행 파일의 경로입니다 /proc/1/exe.
  • (로 시작하는 argv[0]) 의 매개변수 /proc/1/cmdline(널 바이트로 구분된 매개변수)

관련 정보