代码之家  ›  专栏  ›  技术社区  ›  Stewart

Linux:设置进程优先级和动态加载库

  •  0
  • Stewart  · 技术社区  · 6 年前

    我有一个Linux应用程序,它使用修改后的 rpath (安装时设置)。它还需要以实时优先级运行。

    要获得实时优先级,需要执行以下操作:

    sched_param sched;
    sched.sched_priority = 70;
    sched_setscheduler(getpid(), SCHED_FIFO, &sched);
    

    然而 sched_setscheduler 是一个私有方法,受 CAP_SYS_NICE 能力。因此,为了在不以根用户身份运行的情况下获得实时优先级,我添加了 setcap 对我 postinst :

    setcap cap_sys_nice+ep /path/to/myapp
    

    然而, linux decides 不允许程序从 RPATH 如果他们有额外的能力。

    我有没有办法确定自己的优先权 加载rpath库?

    注意:我希望在应用程序或 后安装 . 我希望避免将脚本部署为启动应用程序的唯一方法。我知道 sudo chrt -f -p 70 $! 可以从脚本中完成。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Stewart    6 年前

    我有两个不涉及修改的解决方案 libc . 两种解决方案都要求我们替换 sched_setscheduler() 直接启动另一个进程。

    1. 将文件安装到 /etc/sudoers.d/ 使用以下行:

      %users ALL=NOPASSWD: /usr/bin/chrt
      

      然后从我们的应用程序启动 sudo 作为一个有参数的过程 chrt -f -p X Y 哪里 X 是配置的优先级和 Y 是的结果 getpid() .

    2. 创建自定义 chrt 用:

      cp $(which chrt) $(DESTDIR)/bin/chrt
      sudo setcap cap_sys_nice+ep $(DESTDIR)/bin/chrt
      sudo chmod 755 $(DESTDIR)/bin/chrt
      

      然后从我们的应用程序启动 克里特 作为一个有参数的过程 -f -p X Y

    不确定哪种解决方案更好。注意这是有效嵌入的(或者至少是专门构建的),所以我不太担心安全暴露。