gpt4 book ai didi

python - 未应用于 setuid ed 进程的用户的 Linux 组调度

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:47 26 4
gpt4 key购买 nike

在 2.6.28-11 Linux 内核上,我使用 setpriority 来调整不同用户进程接收的 cpu 时间量。用户 1 将获得用户 2 的双倍 CPU 功率。使用 Linux 的 setpriority,我为用户 2 分配了较低的优先级(在 nice 值方面较高)。当我在计算机负载下通过 shell 运行完全相同的程序时,用户 2 的执行时间是用户 1 的两倍。但是,如果我以 root 身份运行该程序,然后使用 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())))

当然,您可以使用适当的权限修复另一个进程的优先级。

关于python - 未应用于 setuid ed 进程的用户的 Linux 组调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com