장기 실행 프로세스가 있고 다음을 사용하여 프로세스를 중지했다가 다시 시작한다고 가정해 보겠습니다.
kill -STOP <pid>
kill -CONT <pid>
환경 변수든 일부 메모리 위치든 실행 중인 프로세스를 변경하는 일관된 방법이 있습니까?
이 같은:
kill -STOP <pid>
change_process <pid> --new 'value'
kill -CONT <pid>
분명히 이것은 완전히 가짜 API이지만, 여러분이 아이디어를 얻으셨기를 바랍니다.
답변1
아니요. 중지된 프로세스가 중지되었습니다.
실행 중인 프로세스의 설정을 변경하는 전통적인 방법은 구성 파일의 상태를 제어하도록 애플리케이션을 가르치는 것입니다. inotify 시계를 사용하거나 수정 타임스탬프를 주기적으로 확인하세요. 어느 쪽이든, 애플리케이션이 해당 구성 파일이 수정되었음을 발견하면 다시 읽어보세요.
또 다른 접근 방식은 재부팅이나 재구성을 강제하는 신호를 포착하는 것입니다. 예를 들어 Apache는 SIGHUP에서 소프트 재시작을 수행합니다. 즉, 모든 하위 프로세스를 종료하고 구성 파일을 다시 읽어 기본 프로세스를 다시 시작합니다. 이 방법은 다중 파일 구성이 있는 경우 더 편리합니다. 포함된 각 하위 프로필에 관찰자를 배치하는 것은 어렵습니다.
환경 변수는 약간 다릅니다. 애플리케이션이 시작될 때 프로세스 메모리에 복사되며 프로세스 외부에서 액세스할 수 없습니다. 프로세스에 자체 환경을 변경하도록 요청할 수 있으며 이 환경을 자식 프로세스에 제공할 수 있습니다(자식 프로세스도 이를 변경할 수 있음). 하지만 외부에서는 변경할 수 없습니다.
이 경우 애플리케이션을 일시 중지하고 구성을 광범위하게 변경한 다음 구성을 다시 읽어 다시 시작하려는 경우 이론적으로 STOP-CONT가 도움이 됩니다. 하지만 (SIGSTOP-SIGCONT)는 구성을 변경하는 데 더 많은 시간을 제공할 뿐입니다. 애플리케이션을 완전히 중지하는 것이 더 쉬울 수도 있습니다.