由于 xfnts_monitor_start 方法使用 scds_pmf_start() 来启动 PMF 下的监视器守护进程,xfnts_monitor_stop 将使用 scds_pmf_stop() 来停止监视器守护进程。
xfnts_monitor_stop 将首先调用执行一些必要的内务处理函数的 scds_initialize()。scds_initialize() 函数和 scds_initialize(3HA) 手册页包含更多信息。
xfnts_monitor_stop 方法用于调用在 xfnts.c 文件中定义的 mon_stop() 方法,如下所示:
scds_syslog_debug(DBG_LEVEL_HIGH, "Calling scds_pmf_stop method"); err = scds_pmf_stop(scds_handle, SCDS_PMF_TYPE_MON, SCDS_PMF_SINGLE_INSTANCE, SIGKILL, scds_get_rs_monitor_stop_timeout(scds_handle)); if (err != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Failed to stop fault monitor."); return (1); } scds_syslog(LOG_INFO, "Stopped the fault monitor."); return (SCHA_ERR_NOERR); /* Successfully stopped monitor */ }
关于在 svc_mon_stop() 中对 scds_pmf_stop() 函数的调用,请注意以下几点:
SCDS_PMF_TYPE_MON 参数用于标识程序应作为故障监视器停止。此方法还可以停止数据服务或某个其他类型的应用程序。
SCDS_PMF_SINGLE_INSTANCE 参数将此标识为单实例资源。
SIGKILL 参数将标识用于停止资源实例的信号。如果此信号无法停止该实例,则 scds_pmf_stop() 将会返回超时错误。有关详细信息,请参见 scds_pmf_stop(3HA) 手册页。
超时值是资源的 Monitor_stop_timeout 属性的值。
退出前,xfnts_monitor_stop 方法将调用 scds_close() 以收回由 scds_initialize() 分配的资源。scds_initialize() 函数和 scds_close(3HA) 手册页包含更多信息。