容器接口类
自定义容器实例的接口。 更多...
头文件 | #include <ContainerInterface> |
继承自 | QObject |
公共类型
枚举 | ExitStatus { NormalExit, CrashExit, ForcedExit } |
枚举 | ProcessError { } |
枚举 | RunState { NotRunning, StartingUp, Running, ShuttingDown } |
公共函数
virtual bool | attachApplication(const QVariantMap &application) = 0 |
virtual QString | controlGroup() const = 0 |
virtual bool | isReady() const = 0 |
virtual void | kill() = 0 |
virtual QString | mapContainerPathToHost(const QString &containerPath) const = 0 |
virtual QString | mapHostPathToContainer(const QString &hostPath) const = 0 |
virtual qint64 | processId() const = 0 |
virtual void | setBaseDirectory(const QString &baseDirectory) = 0 |
virtual bool | setControlGroup(const QString &groupName) = 0 |
virtual bool | setProgram(const QString &program) = 0 |
virtual bool | start(const QStringList &arguments, const QMap<QString, QString> &runtimeEnvironment, const QVariantMap &amConfig) = 0 |
virtual ContainerInterface::RunState | state() const = 0 |
virtual void | terminate() = 0 |
信号
void | errorOccured(ContainerInterface::ProcessError processError) |
void | finished(int exitCode, ContainerInterface::ExitStatus exitStatus) |
void | ready() |
void | started() |
void | stateChanged(ContainerInterface::RunState state) |
详细描述
当成功调用 ContainerManagerInterface::create() 时,应返回指向此接口的指针
此类的每个实例都对应一个单独的应用程序或(如果受支持)一个单独的快速启动器实例。
成员类型文档
enum ContainerInterface::ExitStatus
本枚举描述了应用程序的不同退出状态。
常量 | 值 | 描述 |
---|---|---|
ContainerInterface::NormalExit | 0 | 应用程序正常退出。 |
ContainerInterface::CrashExit | 1 | 应用程序崩溃。 |
ContainerInterface::ForcedExit | 2 | 应用程序被应用程序管理器杀死,因为它忽略了来自ApplicationManager::stopApplication调用所引发的退出请求。 |
另请参阅ApplicationObject::lastExitStatus以及QProcess::ExitStatus。
枚举 ContainerInterface::ProcessError
本枚举描述了应用程序报告的不同类型的错误。
其名称和值是QProcess::ProcessError的精确副本。
枚举 ContainerInterface::RunState
本枚举描述了应用程序的不同运行状态。
常量 | 值 | 描述 |
---|---|---|
ContainerInterface::NotRunning | 0 | 应用程序尚未开始。 |
ContainerInterface::StartingUp | 1 | 应用程序已启动并正在初始化。 |
ContainerInterface::Running | 2 | 应用程序正在运行。 |
ContainerInterface::ShuttingDown | 3 | 应用程序已被停止并正在清理(在多进程模式下,此状态仅在应用程序优雅地终止时才达到)。 |
成员函数文档
[纯虚函数]
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 描述了发生错误的类型。
[纯虚函数]
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_CONFIG | 是 amConfig 映射的 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
此函数需要返回容器内进程的当前状态。
另请参阅 stateChanged、errorOccured 和 QProcess::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. 在芬兰和/或全球其他国家的商标。所有其他商标均为其各自所有者的财产。