我有一个linux应用程序,使用修改过的rpath(在安装过程中设置)加载* .so库。它还需要以实时优先级运行。
要获得实时优先级,它会执行以下操作:
…
我有两个不涉及修改的解决方案 libc 。这两种解决方案都要求我们将呼叫替换为 sched_setscheduler() 通过调用直接启动另一个进程。
libc
sched_setscheduler()
安装文件到 /etc/sudoers.d/ 使用以下行:
/etc/sudoers.d/
%users ALL=NOPASSWD: /usr/bin/chrt
然后从我们的应用程序启动 sudo 作为一个有参数的过程 chrt -f -p X Y 哪里 X 是配置的优先级和 Y 是结果 getpid() 。
sudo
chrt -f -p X Y
X
Y
getpid()
创建自定义 chrt 有:
chrt
cp $(which chrt) $(DESTDIR)/bin/chrt sudo setcap cap_sys_nice+ep $(DESTDIR)/bin/chrt sudo chmod 755 $(DESTDIR)/bin/chrt
然后从我们的应用程序启动 chrt 作为一个有参数的过程 -f -p X Y
-f -p X Y
不确定哪种解决方案更好。请注意,这是有效嵌入的(或至少是专门构建的)所以我不太担心安全风险。