안녕하세요. 이 내용을 이해하는 데 도움을 주실 수 있는 모든 분들께 미리 감사드립니다.
Linux에서 상위 프로세스와 하위 프로세스 간에 IPC가 어떻게 작동하는지에 대한 30,000피트 뷰가 궁금합니다... IPC 유형이 여러 가지 있다는 것을 알고 있지만... 현재 상위 및 하위 프로세스가 IPC인지 알아내려고 노력 중입니다. API를 통해 커널과의 통신이 제대로 작동하고 있습니다.
예를 들어... bash 쉘이 ps 명령 프로세스를 분기하는 경우... ps 프로세스가 IPC를 사용하여 결과를 bash 쉘에 다시 전달한다고 가정합니다... 그것이 작동하는 방식이라면, API를 통해 진행됩니다.. .그런 것 같지만 구체적으로 언급된 내용을 찾을 수 없습니다.
다시 한 번... 누구든지 저에게 도움을 주셔서 감사합니다.
답변1
귀하의 예에서 실제 IPC는 귀하가 생각하는 것보다 훨씬 적습니다.
bash
명령이 실행 되면 ps
ps 프로세스는 상위 프로세스로부터 표준 입력, 표준 출력 및 표준 오류 설정에 대한 파일 핸들, 현재 작업 디렉터리 등을 상속받습니다.
이 ps
명령은 단순히 출력을 표준 출력 파일 핸들에 기록합니다. 이 핸들은 일반적으로 커널 TTY 드라이버가 담당하는 사용자의 TTY 장치를 가리킵니다. 콘솔 세션(Linux 가상 콘솔이든 실제 직렬 콘솔이든)에서는 최신 시스템에서 사용자 화면에 직접 연결됩니다. TTY 장치는 일반적으로 다른 장치로 반환되는 의사 TTY 슬레이브 장치입니다. 프로세스: 이 프로세스는 로컬 GUI 데스크탑의 터미널 에뮬레이션 프로그램이거나 sshd
원격 로그인에 사용될 수 있습니다. bash
명령을 실행한 쉘은 ps
전혀 관여하지 않습니다.
bash
귀하의 예에서 프로세스 간 통신은 ps
매우 간단합니다. ps
프로세스가 종료되면 처음에는 "좀비" 상태가 됩니다. 프로세스 메모리는 해제되고 남은 것은 프로세스 테이블 슬롯뿐입니다 ps
. 프로세스 종료 생성된 반환 코드입니다.
bash
커널은 이를 찾고 있는 좀비 프로세스의 상위 프로세스 에 SIGCHLD 신호를 보냅니다 wait(2)
. 신호가 수신 되면 프로세스가 종료될 때 생성된 반환 코드 bash
도 수신됩니다 . ps
쉘은 이를 특수 쉘 변수에 넣고 $?
새 명령 프롬프트를 출력하거나 실행 중인 스크립트를 계속합니다( ps
명령이 스크립트에서 시작된 경우).
동시에 반환 코드가 상위 프로세스에 성공적으로 전달되었으므로 커널은 ps
이러한 방식으로 상위 프로세스가 차지한 프로세스 테이블 슬롯을 해제하고 좀비 프로세스는 보류됩니다.