ContainerInterface 类
自定义容器实例的接口。 更多...
头文件 | #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() 成功时,应返回指向此接口的指针。
此类的每个实例对应一个单一的应用程序,如果支持的话,也可以是一个单一快速启动器的实例。
成员类型文档
枚举 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 | 应用程序已停止并正在清理(在多进程模式下,此状态仅在应用程序优雅地终止时才会达到)。 |
成员函数说明
[信号]
void ContainerInterface::errorOccured(ContainerInterface::ProcessError processError)
当容器内的进程发生错误时,需要发出此信号。指定的processError描述了发生的错误类型。
[信号]
void ContainerInterface::finished(int exitCode, ContainerInterface::ExitStatus exitStatus)
当容器内的进程完成时,必须发出此信号。参数exitStatus表示进程退出的原因 - 在正常退出的情况下,exitCode将是进程main()
函数的返回值。
另请参阅QProcess::finished。
[信号]
void ContainerInterface::ready()
如果容器实现需要在后台进行可能昂贵的初始化工作,则可以实现通知应用程序管理器在发出此信号后将调用start()。
如果不需要这样做,则无需发出此信号,但应始终从isReady返回true
。
另请参阅isReady。
[信号]
void ContainerInterface::started()
当容器内的进程开始并state()返回QProcess::Running时,必须发出此信号。
另请参阅QProcess::started。
[信号]
void ContainerInterface::stateChanged(ContainerInterface::RunState state)
每当容器内进程的状态变化时,需要发出此信号。
[纯虚]
bool ContainerInterface::attachApplication(const QVariantMap &application)
应用程序管理器调用此函数,当需要将application附加到此容器实例时:该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()。
[纯虚]
bool ContainerInterface::isReady() const
如果容器准备启动应用程序的程序则为true
,否则为false
。
另请参阅:ready()。
[纯虚]
void ContainerInterface::kill()
当应用程序管理器希望终止容器内的当前进程并立即退出时,将调用此函数。
在Unix上,等效操作会发送SIGKILL
信号。
另请参阅:terminate()。
[纯虚]
QString ContainerInterface::mapContainerPathToHost(const QString &containerPath) const
每当需要在应用程序容器的文件系统命名空间与应用程序管理器之间映射路径时,应用程序管理器将调用此函数。
如果两者都在同一命名空间中运行,您可以简单返回containerPath。
[纯虚]
QString ContainerInterface::mapHostPathToContainer(const QString &hostPath) const
每当需要在应用程序管理器的文件系统命名空间与应用程序容器之间映射路径时,应用程序管理器将调用此函数。
如果两者都在同一命名空间中运行,您可以简单返回hostPath。
[纯虚]
qint64 ContainerInterface::processId() const
如果可用,应返回运行进程的原生进程标识符,否则返回0
。
注意:如果容器解决方案正在管理其自己的私有命名空间,则进程标识符需要转换为应用程序管理器的PID命名空间。
注意:此标识符用于支持应用程序管理器内的安全功能:为每个容器提供一个有效的PID是必要的,(a)这样Wayland窗口才能只由已知的PID接受以及在(b)系统服务可以通过D-Bus调用《a href="qml-qtapplicationmanager-systemui-applicationmanager.html#identifyApplication-method">ApplicationManager::identifyApplication()检索应用程序的元数据。如果您需要在开发期间为Wayland接受任何PID的窗口找到一个快速解决方案,那么以--no-security
运行应用程序管理器。
[纯虚函数]
void ContainerInterface::setBaseDirectory(const QString &baseDirectory)
由应用程序管理器调用以设置容器内部进程的初始工作目录为baseDirectory。
[纯虚函数]
bool ContainerInterface::setControlGroup(const QString &groupName)
此函数预期将应用程序的容器移动到控制组中。《i>groupName不是操作系统使用的底层名称,而是一个抽象。有关如何设置此映射的详细信息,请参见容器文档。如果调用成功返回true
,否则返回false
。
注意:如果您的自定义容器解决方案不支持cgroups,那么只需在此处返回false
。
另请参阅:controlGroup。
[纯虚函数]
bool ContainerInterface::setProgram(const QString &program)
由应用程序管理器调用以设置启动进程时将执行的program。在start()调用之前将调用此函数。如果program在此容器内有效则需要返回true
,否则返回false
。
另请参阅:start。
[纯虚函数]
bool ContainerInterface::start(const QStringList &arguments, const QMap<QString, QString> &runtimeEnvironment, const QVariantMap &amConfig)
将调用此函数以异步启动由setProgram()设置的程序,并带有额外的命令行arguments和来自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 映射的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 | 对象 | 如果全局或仅为此应用程序(通过其info.yaml 清单)请求特定的OpenGL配置,此字段将包含所需的OpenGL配置 。 |
应用管理器只为任何给定实例调用此函数一次。
此函数应返回true
代表成功,否则返回false
。如果返回true
,实现需要根据此调用发出started()或errorOccurred()信号(可以延迟)。
也参见QProcess::start。
[纯虚函数]
ContainerInterface::RunState ContainerInterface::state() const
这个函数需要返回容器内进程的当前状态。
也参见stateChanged,errorOccured,和QProcess::state。
[纯虚函数]
void ContainerInterface::terminate()
当应用管理器尝试终止容器内的进程时,会被调用。
此函数的调用可能会导致进程不会退出。在Unix上,其等效操作是发送SIGTERM
信号。
也参见kill。
©2019 Luxoft Sweden AB。本文档中包含的贡献是各自所有者的版权。提供的文档在免费软件基金会发布的GNU自由文档许可证第1.3版下授权。Qt及其相关标志是芬兰The Qt Company有限公司以及其他国家和地区的商标。所有其他商标归各自所有者所有。