- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
一般来说,这是一个很好回答的问题。 Linux 不允许非特权用户降低 PID 的友好度,以 root 身份运行东西本身就是一种蠕虫病毒。
也就是说,这是我的具体情况:我有一个用户帐户可以管理一些进程,这些进程具有 renice
的无密码 sudo
权限和一些其他命令使用。我还有一个脚本,它是该系统上所有用户的公共(public)入口点。该脚本既可以运行常规用户程序,也可以运行由特殊帐户管理的进程。因此,当脚本以特定选项运行时,如果可以的话,它应该renice
,但如果不能的话,它会默默地失败。
我得到的代码如下:
subprocess.Popen(["sudo", "renice", "-20", str(process.pid)],
# shell = True,
stdout = subprocess.DEVNULL,
stderr = subprocess.STDOUT)
如果我将 shell = True
注释掉,该过程会获得新的好处,但如果我以非特权用户身份运行,sudo
将退出其密码提示并破坏了我的终端输出。击键变得不可见,一切都变得愚蠢。如果我取消注释 shell = True
,我不会得到终端输出。但是,即使我以 root 身份运行它,该过程也不会改变其优点。
损坏的终端输出很可能归因于我正在使用的终端仿真器(还没有用另一个终端仿真器尝试过)但我想合并这些行为。无论如何,sudo
都会保持沉默,但如果用户可以成功执行 sudo,那就更好了。
有什么建议吗?
最佳答案
我想是因为sudo
requires a TTY ,即使不需要密码。
尝试提供一个:
import os
import pty
import subprocess
master, slave = pty.openpty()
p = subprocess.Popen(
["sudo", "id", "-a"],
stdin=slave, stdout=slave, stderr=slave
)
os.close(slave)
output = os.read(master, 1026)
os.close(master)
print(output)
上面的代码应该打印类似 uid=0(root) gid=0(root) groups=0(root)
的内容。如果是这样,则将 id
替换为 renice
,删除不必要的 os.read
,您应该会很好。
更新:就 OP 而言,它因其他原因而失败。将 start_new_session=True
添加到 Popen
使其对于非特权用户静默失败并以 root 身份成功。
关于python - python 中的 sudo renice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575497/
有些 bin 使用 getopt 来解析命令选项,比如 renice。 int getopt(int argc, char * const argv[], const char *optstring)
我试图通过 renice 19 (Linux 3.11) 为受 CPU 限制的应用程序提供最低的调度优先级。但是,它似乎没有按预期工作,或者我有理解问题。 让我描述一下我尝试过的两种方法。我希望以两种
这个问题已经有答案了: How do I execute a program or call a system command? (65 个回答) 已关闭 8 年前。 我正在编写一个 Python 程
我很想知道当您发出 nice 和 renice 命令时调用的内核端方法是什么?我在内核端找到了 set_user_nice() 。然而,它的参数不是 pid 和 nice 值,我们在发出命令 reni
一般来说,这是一个很好回答的问题。 Linux 不允许非特权用户降低 PID 的友好度,以 root 身份运行东西本身就是一种蠕虫病毒。 也就是说,这是我的具体情况:我有一个用户帐户可以管理一些进程,
我是一名优秀的程序员,十分优秀!