내 컴퓨터에서(데비안 테스트), 내가 할 때
ps aux | grep pam
나는 얻다
orto 609 0.0 0.0 58532 2148 ? S 08:06 0:00 (sd-pam)
orto 5533 0.0 0.0 12724 1948 pts/1 S+ 16:51 0:00 grep pam
(sd-pam)
이것은 프로세스에 대한 이상한 이름처럼 보입니다. 이 기사를 읽어보세요법정, 나는 이 이름이 systemd에 의해 의도적으로 설정되었음을 발견했습니다. 존재하다소스 코드보자
/* The child's job is to reset the PAM session on
* termination */
/* This string must fit in 10 chars (i.e. the length
* of "/sbin/init"), to look pretty in /bin/ps */
rename_process("(sd-pam)");
아름답게 보인다는 것은 무엇을 의미합니까? 단순한 이름 대신 /bin/ps
왜 그것을 선택합니까 ? 이름 주위에 괄호를 두는 것은 프로세스에 커널 스레드와 같은 특별한 것이 있음을 나타내는 것 같습니다 .(sd-pam)
sd-pam
[kintegrityd]
답변1
이름 주위에 괄호를 넣는 것은 프로세스에 뭔가 특별한 것이 있음을 나타내는 것 같습니다.
두 가지 상황이 있습니다.
(...)
PID 1이 서비스 바이너리를 시작하면 먼저 프로세스를 분기한 다음 서비스 구성에 따라 프로세스의 매개변수를 조정하고 마지막으로 execve()를 호출하여 실제 서비스 프로세스를 실행합니다. 포크와 실행 사이에 PR_SET_NAME을 사용하여 프로세스 이름을 시작될 이름으로 변경하여 결국 시작될 서비스에 쉽게 매핑할 수 있습니다. 그러나 "comm" 이름(예: PR_SET_NAME으로 설정한 프로세스 이름, "맨 위에" 표시된 프로세스 이름)에는 엄격한 크기 제한이 있으므로 잘라야 합니다. 일반적으로 접미사가 더 흥미롭기 때문에 문자열의 시작 부분을 잘라냅니다(그렇지 않으면 systemd의 다양한 서비스가 모두 "(systemd-)"로 표시되므로 특별히 유용하지 않습니다). 이는 결국 지정된 프로세스가 될 프로세스이지만 아직은 아니라는 점을 명확히 하기 위해 () 안에 이름을 넣습니다.
바라보다https://lists.freedesktop.org/archives/systemd-devel/2016-April/036322.html
(sd-pam)
특별한 경우에요
비어 있지 않은 "PAMName="을 사용하여 유닛을 생성하면 하위 프로세스를 포크합니다.~에이 단위는 "(sd-pam)"이라고 하며 세션 모니터링을 담당합니다. 메인 프로세스가 종료되기를 기다린 다음 pam_close_session(3)을 통해 완료합니다.
답변2
/bin/ps에서 보기 좋다는 것은 무엇을 의미하며 왜 sd-pam 대신 (sd-pam)을 이름으로 선택했습니까? 이름 주위에 괄호를 넣는 것은 프로세스에 뭔가 특별한 것이 있음을 나타내는 것 같습니다.
예, 뭔가 특별한 것이 있습니다. 이건 가상의 이름이에요아니요기존 바이너리 파일의 이름입니다. 즉, "sd-pam" 파일은 어디에도 없습니다. 프로세스는 PID 1의 포크입니다.
괄호는 아마도 이것을 나타 내기위한 것입니다.