c++ - 检查 Linux 功能以设置线程优先级

标签 c++ docker pthreads linux-capabilities

我有一个 C++ 应用程序,它使用 pthread_setschedparam() 来设置线程优先级。在 docker 容器内,这会因 EPERM 而失败。

如何检测我的进程是否具有设置线程优先级的必要能力?

最佳答案

我猜你的 C++ 应用程序可以设置线程优先级,因为它在主机上具有所需的 linux 功能 cap_sys_nice

主机上的所有 linux 功能都可以使用这个命令 capsh --print

在 docker conatiner 中,您需要使用 --cap-add 选项设置此功能。

docker run -it --rm --cap-add SYS_NICE ubuntu bash

如果不行试试这个

docker run -it --rm --userns host --cap-add SYS_NICE ubuntu bash

因为没有 --userns 选项可能会出现一些问题,如此处所述 https://github.com/moby/moby/issues/25622

最坏的情况:如果其中任何一个都不起作用,则尝试使用 --privileged 选项运行容器,这会将所有 linux 功能添加到此容器中,但不推荐这样做。

试一试。

关于c++ - 检查 Linux 功能以设置线程优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416870/

相关文章:

docker - 无法开始使用Docker

c++ - 具有pthread和锁且无提升的单读者多作者

c - 创建多个具有互斥锁和不同生命周期的线程

c++ - 使用 wxwidgets 不会在 C++ 中抛出事件

linux - 在 Dockerfile 中找不到 tar 命令

c++ - C++动态库中的导出函数

azure - Azure 存储模拟器的 Docker 镜像 - nginx 错误

需要处理查询时 C 秒滴答作响?

c++ - 文件范围的原子是否受初始化顺序失败的影响?

c++ - 我可以在编译时使用一个常量来选择一个类,可能使用模板吗?