資源類型實現的 Stop 回呼方法由 RGM 在叢集節點上呼叫來停止應用程式。 Stop 方法的回呼語義要求
Stop 方法必須是等冪的,因為即使 Start 方法未在節點上成功完成,RGM 也可以呼叫 Stop 方法。 這樣,Stop 方法必定會成功 (退出零),即使應用程式目前未在叢集節點上執行,並且無任何工作可做。
如果資源類型的 Stop 方法在叢集節點上失敗 (退出非零),正被停止的資源將以 STOP_FAILED 狀態結束。 依靠資源上的 Failover_mode 設定,這可能導致 RGM 強制重新啟動叢集節點。 因此,請務必設計 Stop 方法以便於應用程式無法終止時,它會盡力確實停止應用程式,甚至突然地強制終止應用程式 (例如,使用 SIGKILL)。 它還應該確保能夠及時完成此作業,因為框架將 Stop_timeout 的過期視為停止失敗,並使資源處於 STOP_FAILED 狀態。
當 DSDL 公用程式 scds_pmf_stop() 初次嘗試軟式 (透過 SIGTERM) 停止應用程式 (假設它透過 scds_pmf_start() 在 PMF 下啟動),然後遞送 SIGKILL 至程序時,它應該滿足大多數應用程式的需要。 請參閱PMF 函式,以取得關於此公用程式的詳細資訊。
遵循到目前為止使用的程式碼模型,假定要停止應用程式的應用程式特定函式名為 svc_stop() (svc_stop() 實作是否使用 scds_pmf_stop() 在此處不考慮,而取決於是否透過 Start 方法在 PMG 下啟動應用程式),Stop 方法可以實施為
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialization Error */ } return (svc_stop(handle));
在 Stop 方法的實現中不使用 svc_validate() 方法,因為即使系統目前出現問題,Stop 方法也會試圖停止此節點上的應用程式。