별도의 프로세스를 시작하는 (Java) 프로세스가 있습니다 foo
. foo
시작하고 실제로 실행하는 데 몇 초가 걸립니다. 제어권은 시작되자마자 상위 프로세스로 반환되지만 foo
반드시 준비되지는 않습니다.
또한 디버그 모드에서는 foo
사람이 읽을 수 있는 출력이 및 에 기록됩니다.stdout
stderr
내가 아는 옵션:
sleep
상위 프로세스는 이론적으로 이전보다n
몇 초 정도 더 오래 걸립니다.n
foo
stdout
부모 프로세스가 자식 프로세스에서 특별한 것을 찾도록stderr
하고 이를 발견할 때까지 차단합니다.- 준비가 되면 운영 체제에서 일종의 플래그 파일을 터치
foo
하고 상위 프로세스가 파일을 감시하도록 하세요.
나는 이러한 옵션 중 어떤 것도 정말 마음에 들지 않습니다(1. 경쟁 조건이 있음, 2. 마법 문자열 일치와 관련됨, 3. foo
여러 프로세스가 충돌할 위험이 있음). 다른 방법(부모 프로세스에서 자식 프로세스로)으로 신호를 보내 통신할 수 있지만 자식 프로세스가 자신의 상태를 부모 프로세스에 전달하는 더 좋은 방법을 모르겠습니다.
답변1
아이들은 부모에게 신호를 보낼 수 있습니다. SIGUSR1
그리고 SIGUSR2
이를 위해 존재한다애드 혹여기 상황이 이상적일 수도 있습니다.
애플리케이션은 해당 Java 코드를 사용하여 상위 프로세스 ID를 쉽게 찾을 수 있습니다 getppid()
. 또는 대안으로 상위 프로세스가 $$
명령줄에서 자체 PID(PID)를 Java 코드가 가져올 수 있는 매개변수로 전달하도록 할 수 있습니다.