因为 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) 手册页。