← 질문 목록
#402깊이 0
컨테이너의 1번 프로세스는 무엇을 해야 하는가?
인프라 · 보안깊이
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
종료 신호를 받아 정리하고 자식이 남긴 껍데기를 거두어야 한다. 컨테이너 안의 1번은 리눅스에서 init이 서던 자리라 규칙이 다르다.
- 1. 오케스트레이터에서 1번 프로세스로: 그만두라는 신호를 보낸다
- 2. 1번 프로세스에서 자식들로: 신호를 넘겨 하던 일을 마치게 한다
- 3. 자식들에서 1번 프로세스로: 끝났다고 알린다. 남은 항목은 1번이 거둔다
- 4. 1번 프로세스에서 오케스트레이터로: 다 닫았다고 알린다. 기다려 준 시간이 지나면 강제로 끊긴다
1번에는 신호의 기본 동작이 붙지 않는다. 다루지 않은 종료 신호를 그냥 무시하므로, 직접 받아 처리하지 않으면 버티다 강제로 끊긴다.
강제로 끊기면 하던 요청이 중간에 잘린다. 배포할 때마다 오류가 조금씩 나는 원인이 여기인 경우가 있다.
셸을 거쳐 띄우면 갈린다. 명령이 하나면 셸이 자기를 앱으로 바꿔 앱이 1번이 되지만, 여러 명령을 잇거나 리다이렉션을 쓰면 셸이 1번으로 남아 신호를 안 넘긴다.
앱이 1번이 되어도 안심할 수는 없다. npm이나 gradle처럼 자식을 낳는 래퍼가 그 자리에 서면 결과가 같다. 그래서 목록 형식으로 띄우거나 앞에 exec를 붙인다.
거두는 일도 1번 몫이다. 끝난 자식이 남긴 항목을 치우는 것이 init의 일인데, 앱이 그 일을 안 하면 프로세스 표에 쌓인다.