我有一个 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/