因为 xfnts_start 方法使用 scds_pmf_start() 在 PMF 控制下启动服务,所以 xfnts_stop 将使用 scds_pmf_stop() 停止该服务。
在 xfnts_stop 中首先调用的是 scds_initialize(),该函数可以执行一些必要的内务处理功能(scds_initialize() 函数和 scds_initialize(3HA) 手册页中包含了详细信息)。
xfnts_stop 方法将调用在 xfnts.c 中定义的 svc_stop() 方法,如下所示。
scds_syslog(LOG_ERR, "Issuing a stop request."); err = scds_pmf_stop(scds_handle, SCDS_PMF_TYPE_SVC, SCDS_PMF_SINGLE_INSTANCE, SIGTERM, scds_get_rs_stop_timeout(scds_handle)); if (err != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Failed to stop HA-XFS."); return (1); } scds_syslog(LOG_INFO, "Successfully stopped HA-XFS."); return (SCHA_ERR_NOERR); /* Successfully stopped */
请注意以下关于在 svc_stop() 中调用 scds_pmf_stop() 函数的内容。
SCDS_PMF_TYPE_SVC 参数用来标识要作为数据服务应用程序停止的程序 — 此方法也可以停止故障监视器或一些其它类型的应用程序。
SCDS_PMF_SINGLE_INSTANCE 参数标识信号。
SIGTERM 参数标识要用来停止该资源实例的信号。 如果此信号无法停止该实例,scds_pmf_stop() 将发送 SIGKILL 来停止该实例,如果仍然失败,则会返回超时错误。 有关详细信息,请参阅 scds_pmf_stop(3HA) 手册页。
超时值即该资源的 Stop_timeout 特性的值。
在退出之前,xfnts_stop 方法将调用 scds_close() 回收通过 scds_initialize() 分配的资源。 有关详细信息,请参阅scds_initialize() 函数和 scds_close(3HA) 手册页。