이미 실행 중인 도우미에 관한 메시지는 프로세스를 죽이기 시작할 허가가 아니라 수명 주기의 단서로 다루십시오. 위험한 단계는 중지 자체가 아니라 그 전의 식별입니다. 한 Mac에 이름이 비슷한 구성 요소가 여러 개 있을 수 있고 그중 하나만 연결을 소유하기 때문입니다. 먼저 식별 기록을 만들고, 그다음 중지가 과연 올바른 행동인지 결정하십시오.

행동하기 전에 식별 기록을 만드십시오

네 가지 사실이 프로세스를 식별 가능하게 만듭니다. 현재 PID와 시작 시각, 소속된 실행 파일과 제품, 실행되는 사용자나 권한 맥락, 그리고 그것을 시작한 무엇이든입니다. ps -o pid,ppid,user,etime,command -p 1234 처음 세 가지를 한 줄로 보여 주며 프로세스가 얼마나 오래 살아 있었는지도 포함합니다. Activity Monitor는 같은 정보를 더 친근한 얼굴로 보여 줍니다. 제어 주체, 즉 시작과 중지를 책임지는 응용 프로그램이나 서비스를 더하면, 이 네 가지로 프로세스는 이름이 아니라 생각해 볼 수 있는 객체가 됩니다.

네 가지 중 하나라도 알 수 없으면 거기서 멈추십시오. 낯선 구성 요소는 실험이 아니라 게시자나 관리자에게 할 질문입니다.

오래된 로그의 PID는 이제 다른 사람의 것입니다

프로세스 ID는 재활용되므로 어제 로그에서 복사한 번호가 지금은 전혀 무관한 무언가를 가리킬 수 있습니다. 어떤 결론을 내리기 전에 시작 시각을 로그의 타임스탬프와 비교하십시오. 짧은 이름도 마찬가지로, 한 제품의 두 빌드가 같은 이름에 다른 목적을 가진 도우미를 함께 배포할 수 있습니다. 정체성은 튜플이며 결코 숫자만이 아닙니다.

다른 무엇을 건드리기 전에 역할을 나누십시오. 단일 연결의 클라이언트, 여러 응용 프로그램에 서비스하는 공유 도우미, 다른 사람의 세션을 받아들이는 서버는 모두 목록에서 백그라운드 프로세스처럼 보입니다. 고려하지 않은 결과 없이 중지할 수 있는 것은 그중 하나뿐입니다.

신호가 아니라 소유자를 통해 중지하십시오

그것을 소유한 컨트롤, 즉 연결의 연결 끊기 버튼, 서비스가 지원하는 중지 명령, 또는 관리 에이전트 자체의 동작부터 시작하십시오. 그 경로는 제품이 기대하는 해체를 수행하며 경로 제거와 터널 장치 닫기를 포함합니다. 신호는 그 모두를 건너뛰고 상태를 남깁니다.

그다음 무엇이 남는지 보십시오. 메모리에 남아 있는 프로세스는 다음 연결을 기다리는 것일 수 있습니다, 이것은 실패한 중지가 아니라 설계상의 선택입니다.

감독자가 당신이 죽인 것을 다시 시작하는 이유

시동 데몬이나 자동 연결 정책이 터널을 켜 두려는 것이라면 프로세스를 죽이는 것은 아무것도 표현하지 못합니다. 감독자는 종료를 보고, 로그를 다 읽기 전에라도 다시 시작합니다.

그와 싸우기 전에 감독자를 찾으십시오. launchctl list 로드된 작업과 그 레이블을 보여 주며, 계속 살려 두는 설정이 있는 작업은 설계상 종료 시 다시 시작됩니다. 거기서 올바른 행동은 의도를 바꾸는 것으로, 작업을 언로드하고, 자동 연결 정책을 끄고, 또는 관리자에게 그렇게 해 달라고 요청하는 것입니다. 강제 종료는 의미가 다른 다른 도구이며, 멈춘 프로세스를 위한 문서화된 복구 절차에 속하지 일상적인 연결 관리에 속하지 않습니다.

죽인 일이 아니라 수명 주기 사건을 기록하십시오

구성 요소의 정체성, 클라이언트 버전, 첫 번째 관련 수명 주기 사건, 그리고 무엇을 했는지 적으십시오. 사건은 행동보다 중요한데, 로그인할 때 인스턴스 두 개가 나타나는 것은 되풀이될 시동 순서 문제이기 때문입니다. 실행 파일과 그 제어 주체를 지목하는 기록은 다음 사람이 그것을 재현할 수 있게 합니다.

그다음 의도한 상태, 즉 사용자에게 필요했던 서비스와 그것이 도달하는 사설 자원을 확인하십시오. 하위 문자열을 grep하여 모든 일치를 강제로 죽이는 파이프라인은 위의 모든 것을 버리고 두 인스턴스가 왜 존재했는지에 대한 증거를 보통 파괴하므로 피하십시오. 프로세스가 계속 돌아온다면 발견된 것은 구성이나 순서의 결함이며, 수정은 클라이언트의 시동 동작을 소유한 쪽의 몫입니다.

관련 글