2010-02-16 3 views
0

방금 ​​내 앱용 PHP 데몬을 작성했으며 지정된 신호 (SIGUSR1)에서 생성 된 일부 출력 정보를 구현하려고합니다. 나는 코드PHP의 신호 처리기에서 tty를 호출하는 사람

pcntl_signal(SIGUSR1, array($this, 'signal_status')); 

의 신호 처리기를 가지고와 기능 핸들러는 한 가지를 제외하고

protected function signal_status($signal_number) 
    { printf("blah\n"); } 

모든 작업을 준비했다. 내가 내 데몬 (posix_kill($pid, SIGUSR1) 또는 bash에서 심지어 kill -10 pid)에 신호를 보낼 때 데몬을 시작하는 콘솔에서 출력을 얻었습니다.

데몬이 아닌 호출자의 파일 설명자를 가져올 수 있습니까? 나는이 데이터를 데몬의 FD가 아니라 지정된 출력 (예 : kill -10 PID 이후)으로 보내지 않을 것입니다.

나는 내가이 명확하게 :) 쓴 희망

답변

0

글쎄, 당신 수없는, 그냥 몇 가지 운영 체제의 기본 요소를 설정하는 신호를 보내, 그것은 하나에 데몬 사이의 통신 경로를 설정 함께 할 수 없다 다른 한편으로는 신호를 생성하는 데 사용 된 도구와 도구를 사용합니다. 당신이 가지고있는 대안은 데몬의 콘솔 출력을 보거나 데몬 덤프 상태를 로그 파일로 만들고 신호를 보내고 로그 파일을 인쇄하는 일종의 유틸리티를 생성하는 것입니다 (그리고 그런 식으로 진행한다면 왜 던지지 말아야합니까? 로그 파일을 모두 꺼내서 로깅을 주기적으로 설정하십시오. 신호가 inteprocess communiation을 수행하는 공손한 방법이 아니기 때문에.

+0

"신호 발신자"라는 FD를 얻을 수 있다면, 데이터를 직접 덤프 (예 :/dev/pts/7) - 어쨌든 답변 주셔서 감사합니다 :) – sbczk

+0

깨끗한 해결책은 데몬과 인터 프로세스 통신의 실제 형태를 제공하는 것입니다 (비누 생각, RPC 생각, 듣기 생각하기 소켓에, 파이프를 사용하여 생각 ...) 나는 신호의 근원을 확인할 수 있다고 생각하지 않는다. –