win32service win32_start_service_ctrl_dispatcher

(PECL win32service >=0.1.0)

win32_start_service_ctrl_dispatcher — 스크립트를 SCM에 등록하여 지정된 이름의 서비스로 작동할 수 있도록 합니다.


설명

win32_start_service_ctrl_dispatcher(string $name, bool $gracefulMode = true): void

서비스 제어 관리자를 통해 시작되면 서비스 모니터링 및 통신 시설을 설정하기 위해 서비스 프로세스가 "check-in"되어야 합니다. 이 함수는 서비스 제어 관리자와의 하위 수준 통신을 처리하기 위해 스레드를 생성하여 체크인을 수행합니다.

서비스 프로세스가 시작되면 2가지 작업을 수행해야 합니다. 첫 번째는 서비스 제어 관리자에게 서비스가 실행 중임을 알리는 것입니다. 이것은 WIN32_SERVICE_RUNNING 상수로 win32_set_service_status()를 호출하여 달성됩니다. 서비스가 실제로 실행되기 전에 긴 프로세스를 수행해야 하는 경우 WIN32_SERVICE_START_PENDING 상수를 사용할 수 있습니다. 두 번째는 서비스 제어 관리자와 계속 체크인하여 종료해야 하는지 결정할 수 있도록 하는 것입니다. 이는 주기적으로 win32_get_last_control_message()를 호출하고 반환 코드를 적절하게 처리하여 달성됩니다.

주의 버전 0.2.0부터 이 함수는 "cli" SAPI에서만 작동합니다. 다른 SAPI에서는 이 함수는 비활성화됩니다.


매개변수

name
win32_create_service()에 의해 등록된 서비스의 짧은 이름입니다.
gracefulMode
우아한 종료에 대해 true입니다. 오류가 있는 종료의 경우 false입니다. 자세한 내용은 win32_set_service_exit_mode()를 참조하세요.

반환 값

값이 반환되지 않습니다.

버전 1.0.0 이전에는 성공 시 WIN32_NO_ERROR를, 매개변수에 문제가 있으면 false를, 실패 시 Win32 Error Code를 반환했습니다.


오류/예외

버전 1.0.0 이전에는 SAPI가 "cli"가 아니면 이 함수는 E_ERROR 레벨 오류를 내보냅니다.

버전 1.0.0부터 SAPI가 "cli"가 아닌 경우 Win32ServiceException이 발생합니다.


변경 로그

버전 설명
PECL win32service 1.0.0 매개변수의 잘못된 데이터에 대해 ValueError를 발생시킵니다. 이전에는 false가 반환되었습니다.
PECL win32service 1.0.0 이전에 Win32 Error Code가 반환된 오류 시 Win32ServiceException을 throw합니다.
PECL win32service 1.0.0 반환 유형은 이제 void이며 이전에는 mixed되었습니다.
PECL win32service 0.4.0 GracefulMode 매개변수가 추가되었습니다.
PECL win32service 0.2.0 이 함수는 "cli" SAPI에서만 작동합니다.

Examples

예제 #1 win32_start_service_ctrl_dispatcher() 예제

서비스가 SCM에서 실행 중인지 확인하십시오.

                  
<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
  die("I'm probably not running under the service control manager");
}

win32_set_service_status(WIN32_SERVICE_START_PENDING);

// Some lengthy process to get this service up and running.

win32_set_service_status(WIN32_SERVICE_RUNNING);

while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
  # do some work here, trying not to take more than around 30 seconds
  # before coming back into the loop again
}
?>
                  
                

기타