容器接口类

自定义容器实例的接口。 更多...

头文件 #include <ContainerInterface>
继承自 QObject

公共类型

枚举ExitStatus { NormalExit, CrashExit, ForcedExit }
枚举ProcessError { }
枚举RunState { NotRunning, StartingUp, Running, ShuttingDown }

公共函数

virtual boolattachApplication(const QVariantMap &application) = 0
virtual QStringcontrolGroup() const = 0
virtual boolisReady() const = 0
virtual voidkill() = 0
virtual QStringmapContainerPathToHost(const QString &containerPath) const = 0
virtual QStringmapHostPathToContainer(const QString &hostPath) const = 0
virtual qint64processId() const = 0
virtual voidsetBaseDirectory(const QString &baseDirectory) = 0
virtual boolsetControlGroup(const QString &groupName) = 0
virtual boolsetProgram(const QString &program) = 0
virtual boolstart(const QStringList &arguments, const QMap<QString, QString> &runtimeEnvironment, const QVariantMap &amConfig) = 0
virtual ContainerInterface::RunStatestate() const = 0
virtual voidterminate() = 0

信号

voiderrorOccured(ContainerInterface::ProcessError processError)
voidfinished(int exitCode, ContainerInterface::ExitStatus exitStatus)
voidready()
voidstarted()
voidstateChanged(ContainerInterface::RunState state)

详细描述

当成功调用 ContainerManagerInterface::create() 时,应返回指向此接口的指针

此类的每个实例都对应一个单独的应用程序或(如果受支持)一个单独的快速启动器实例。

该接口紧密仿照 QProcess,甚至重用了许多 QProcess 的枚举。

成员类型文档

enum ContainerInterface::ExitStatus

本枚举描述了应用程序的不同退出状态。

常量描述
ContainerInterface::NormalExit0应用程序正常退出。
ContainerInterface::CrashExit1应用程序崩溃。
ContainerInterface::ForcedExit2应用程序被应用程序管理器杀死,因为它忽略了来自ApplicationManager::stopApplication调用所引发的退出请求。

另请参阅ApplicationObject::lastExitStatus以及QProcess::ExitStatus

枚举 ContainerInterface::ProcessError

本枚举描述了应用程序报告的不同类型的错误。

其名称和值是QProcess::ProcessError的精确副本。

枚举 ContainerInterface::RunState

本枚举描述了应用程序的不同运行状态。

常量描述
ContainerInterface::NotRunning0应用程序尚未开始。
ContainerInterface::StartingUp1应用程序已启动并正在初始化。
ContainerInterface::Running2应用程序正在运行。
ContainerInterface::ShuttingDown3应用程序已被停止并正在清理(在多进程模式下,此状态仅在应用程序优雅地终止时才达到)。

另请参阅ApplicationObject::runStateQProcess::ProcessState

成员函数文档

[纯虚函数] bool ContainerInterface::attachApplication(const QVariantMap &application)

当需要将一个应用程序附加到本容器实例时,应用程序管理器会调用此函数:应用程序映射几乎与ApplicationManager::get()方法返回的应用程序元数据相对应

以下字段适用于此函数

名称
isRunning
isStartingUp
isShuttingDown
isLocked
isUpdating
isRemovable
updateProgress
application
lastExitCode
lastExitStatus

以下字段在ApplicationManager::get()提供的内容之上

名称描述
codeDir应用程序代码所在目录。
manifestDir应用程序清单(info.yaml)所在目录。
applicationProperties包含在清单中看到的所有应用程序属性的映射。

[纯虚函数] QString ContainerInterface::controlGroup() const

此函数需要返回应用程序容器所在的控制组。此函数返回的控制组名称不是操作系统使用的低级名称,而是一个抽象名称。有关如何设置此映射的更多详细信息,请参阅容器文档

注意:如果您的自定义容器解决方案不支持cgroups,则在此处返回一个空的`QString`。

另请参阅setControlGroup

[信号] void ContainerInterface::errorOccured(ContainerInterface::ProcessError processError)

当容器中的进程发生错误时,需要发出此信号。指定的 processError 描述了发生错误的类型。

另请参阅QProcess::errorOccurred

[纯虚函数] void ContainerInterface::finished(int exitCode, ContainerInterface::ExitStatus exitStatus)

容器中的进程结束时,必须发出此信号。《i translate="no">exitStatusexitCodemain()函数的返回值。

另请参阅QProcess::finished

[纯虚函数] bool ContainerInterface::isReady() const

如果容器准备启动应用程序的程序,则需要返回《code translate="no">truefalse。

另请参阅ready

[纯虚函数] void ContainerInterface::kill()

由应用程序管理器调用,如果在容器中杀死当前进程,将导致它立即退出。

在 Unix 上,等效的操作将发送一个《code translate="no">SIGKILL信号。

另请参阅terminate

[纯虚函数] QString ContainerInterface::mapContainerPathToHost(const QString &containerPath) const

无论何时在应用程序容器的文件系统命名空间和应用程序管理器之间需要映射路径,应用程序管理器都会调用此函数。

如果两者都在同一命名空间中运行,可以直接返回《i translate="no">containerPath。

[纯虚函数] QString ContainerInterface::mapHostPathToContainer(const QString &hostPath) const

无论何时在应用程序管理器和应用程序的容器之间需要映射路径,应用程序管理器都会调用此函数。

如果两者都在同一命名空间中运行,可以直接返回《i translate="no">hostPath。

[纯虚函数] qint64 ContainerInterface::processId() const

如果可用,应返回运行进程的本地进程标识符。如果没有正在运行的进程,则返回《code translate="no">0。

注意:如果容器解决方案管理自己的私有命名空间,则进程标识符需要转换为应用程序管理器的 PID 命名空间。

注意: 此标识符对于在应用管理器内支持安全特性是必需的:为每个容器拥有一个有效的PID是必要的,(a)以便仅接受来自已知PIDs的Wayland窗口,并且(b)用于系统服务通过D-Bus调用ApplicationManager::identifyApplication()检索应用程序的元数据。如果开发期间需要快速处理方法以使Wayland接受来自任何PID的窗口,那么请以--no-security运行应用管理器。

[信号] void ContainerInterface::ready()

如果容器的实现需要在后台进行可能昂贵的初始化工作,它可以通知应用管理器延迟调用start(),直到它发出此信号。

如果不需要这样做,那么你无需发出此信号,但你应始终从isReady()返回true

另见 isReady

[纯虚函数] void ContainerInterface::setBaseDirectory(const QString &baseDirectory)

被应用管理器调用,以将容器内的进程的初始工作目录设置为baseDirectory

[纯虚函数] bool ContainerInterface::setControlGroup(const QString &groupName)

此函数预期将应用程序的容器移入控制组。`groupName`不是操作系统使用的底层名称,而是一个抽象概念。有关如何设置此映射的更多详细信息,请参阅容器文档。如果调用成功返回true,否则返回false

注意: 如果您的自定义容器解决方案不支持cgroups,则在此处简单返回false

另见 controlGroup

[纯虚函数] bool ContainerInterface::setProgram(const QString &program)

此函数由应用管理器调用,以便在启动进程时设置要执行的program。这将先于start()被调用。如果程序在此容器内有效,则需要返回true,否则返回false

另见 start

[纯虚函数] bool ContainerInterface::start(const QStringList &arguments, const QMap<QString, QString> &runtimeEnvironment, const QVariantMap &amConfig)

此函数将用于异步启动应用程序程序(由 setProgram() 设置),并带有额外的 命令行参数 以及来自 runtimeEnvironment 的额外环境变量。

runtimeEnvironment 是一个用于环境变量及其值的字符串映射。此映射中的空值表示,以键表示的环境变量应当被删除。原生运行时会默认定义这些变量。

名称描述
QT_QPA_PLATFORM设置为 wayland
QT_IM_MODULE为空(未设置),这意味着应用程序将使用默认的 wayland 文本输入法。
QT_SCALE_FACTOR为空(未设置),以防对 wayland 客户端相对于合成器进行缩放。否则,在支持缩放的 4K 桌面上运行应用程序管理器将导致应用程序管理器内部应用程序出现双重缩放。
QT_WAYLAND_SHELL_INTEGRATION设置为 xdg-shell。这是首选的 wayland 终端集成方式。
AM_CONFIGamConfig 映射的 YAML,UTF-8 编码字符串版本(见下文)。
AM_NO_DLT_LOGGING只有在需要关闭 DLT 日志(否则不设置)的情况下设置为 1。相同的信息可以通过 amConfig 获取(见下文),但对于某些应用程序和启动器可能需要尽早获取这些信息。

amConfig 映射是一组设置,这些设置从应用程序管理器传递给程序。在 runtimeEnvironment 内的 AM_CONFIG 环境变量中已经以字符串形式对相同信息进行了编码,但在容器插件中重新解析该 YAML 片段会非常繁琐。

amConfig 当前定义的字段如下

名称类型描述
baseDir字符串应用程序管理器启动的基础目录。对于相对导入路径是必需的。
dbus/p2p字符串应用程序管理器和此应用程序之间 P2P 总线的 D-Bus 地址。
dbus/org.freedesktop.Notifications字符串通知接口的 D-Bus 地址。可以是 session(默认)、system 或实际的 D-Bus 总线地址。
logging/dlt布尔值如果设置为 true,则应在 DLT 中执行日志记录。
logging/rules列表在应用程序管理器的主配置文件中设置的 Qt 日志规则。
systemProperties对象通过应用程序管理器的主配置文件设置的库自特定 系统属性
runtimeConfiguration对象用于此应用程序的 运行时配置
ui/slowAnimations布尔值如果应减慢动画的速度,则设置为 true
ui/iconThemeName字符串如果在应用程序管理器中设置,则此设置将把图标主题名称传递给应用程序(见 QIcon::setThemeName())。
ui/iconThemeSearchPaths字符串如果在应用程序管理器中设置,则此设置将把图标主题搜索路径传递给应用程序(见 QIcon::setThemeSearchPaths())。
ui/opengl对象如果全局请求特定的 OpenGL 配置(适用于应用程序管理器或仅适用于此应用程序的 info.yaml 清单),则此字段将包含所需的 OpenGL 配置

应用程序管理器对于任何给定的实例将只调用此函数一次。

此函数应在成功时返回 true,否则返回 false。如果返回 true,则实现需要根据这个调用发出 started() 或 errorOccurred() 信号(可以延迟)。

另请参阅 QProcess::start

[信号] void ContainerInterface::started()

当容器内的进程开始并且 state() 返回 QProcess::Running 时,必须发出这个信号。

另请参阅 QProcess::started

[纯虚函数] ContainerInterface::RunState ContainerInterface::state() const

此函数需要返回容器内进程的当前状态。

另请参阅 stateChangederrorOccuredQProcess::state

[信号] void ContainerInterface::stateChanged(ContainerInterface::RunState 状态)

当容器内进程的状态发生变化时,需要发出此信号。

[纯虚函数] void ContainerInterface::terminate()

由应用程序管理器调用,尝试终止容器内的进程。

调用此函数后,进程可能不会退出。在 Unix 上,这相当于发送一个 SIGTERM 信号。

另请参阅 kill

© 2024 The Qt Company Ltd. 本文档中的贡献属于各自所有者的版权。此文档根据免费软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款提供。Qt 及其相关标志是 The Qt Company Ltd. 在芬兰和/或全球其他国家的商标。所有其他商标均为其各自所有者的财产。