对于用户的Linux组调度没有被应用到的setuid-ED过程
-
20-09-2019 - |
题
在所述2.6.28-11 Linux内核中,我使用setpriority偏压不同用户进程收到的CPU时间量。用户1是接收的用户2双CPU的功率使用Linux的setpriority,我已经分配的用户2(在nice值而言更高)更低的优先级。当我经由与负载下的计算机外壳运行完全相同的程序,用户2的执行两倍长取为用户1的。但是,如果我运行该程序作为根,然后使用的setuid,个seteuid,setgid的,setegid和setgroups成为用户2(再次计算机是具有完全相同的程序负荷下由用户1中相同的方式运行)时,程序需要大量的时间来执行完全相同的量;用户2的过程中没有被安排比用户1的任何减少。我怎样才能解决这个问题?我是否需要设置任何其他调度程序来实现这一过程现在是一个不同的用户的一部分?
在程序正在运行是在Python。
解决方案
右,这是设计的行为,即使它不是你想要的。您可以更新自己的优先级相匹配,你应该继承什么,如果你正常启动:
/* C */
#include <sys/resource.h>
int proc_prio = getpriority(PRIO_PROCESS, getpid()),
pgrp_prio = getpriority(PRIO_PGRP, getpgrp()),
user_prio = getpriority(PRIO_USER, getuid());
setpriority(PRIO_PROCESS, getpid(),
proc_prio < pgrp_prio ? pgrp_prio < user_prio ? user_prio
: pgrp_prio
: proc_prio < user_prio ? user_prio
: proc_prio);
# Python
import ctypes
import os
PRIO_PROCESS, PRIO_PGRP, PRIO_USER = 0, 1, 2
libc = ctypes.CDLL('libc.so.6')
libc.setpriority(PRIO_PROCESS, os.getpid(),
max(libc.getpriority(PRIO_PROCESS, os.getpid()),
libc.getpriority(PRIO_PGRP, os.getpgrp()),
libc.getpriority(PRIO_USER, os.getuid())))
或者你当然可以解决另一个进程的优先级,相应的权限。
不隶属于 StackOverflow