// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.process.lifecycle;

protocol Lifecycle {
    /// The process must clean up its state in preparation for termination, and
    /// must close the channel hosting the `Lifecycle` protocol when it is
    /// ready to be terminated. The process should exit after it completes its
    /// cleanup. At the discretion of the system the process may be terminated
    /// before it closes the `Lifecycle` channel.
    Stop();
};
