我需要从脚本运行dosemu
。nice --20
问题是:只有使用 sudo 才能应用负值。
您知道有什么方法可以nice
在没有脚本的情况下运行命令sudo
或者只是nice --20 dosemu
从脚本运行吗?
答案1
不幸的是,我认为这并不容易实现。
如果您的 dosemu 进程以单独的用户身份运行,那么您可以使用 将该用户的所有进程的优先级设置为负值/etc/security/limits.conf
。
编辑:我真傻,你不能创建一个 suid shell 脚本,但它不起作用。
EDIT2:好的,您可以配置 sudo,这样当 sudo 组中的某个人运行 nice 或 renice 时,它不需要您输入密码。在终端窗口中,输入
sudo visudo
这将打开一个简单的文本编辑器,用于编辑 sudo 的配置。在文件末尾添加以下行:
%sudo ALL = (ALL) NOPASSWD: /usr/bin/nice,/usr/bin/renice
退出编辑器。编辑器将确保语法正确(否则可能会破坏系统)。现在,您可以运行
sudo nice -n -20 sudo -u $USER /some/program
并且不会提示您输入密码。事实上,nice 将启动另一个优先级为 -20 的名为 sudo 的进程。这个新的 sudo 进程将切换回您的原始用户(-u $USER
否则您将以 root 身份运行 /some/program)并启动 /some/program。
答案2
尝试这个:
sudo -k nice -n -20 su -c "dosemu" $USER
在运行时运行以下命令:
ps -A --forest -o pid,user,command |grep dosemu
您将看到它nice
是以 root 权限运行的,但是dosemu
却作为正常 $USER 运行。
了解它有多安全:为确保没有缺陷,请尝试以下操作,您会看到它会询问密码 2 次,因为sudo ls
它作为普通 $USER 运行,因此带有 sudo 的脚本将无法正常工作:
sudo -k nice -n -5 su -c "sudo ls" $USER
由于已经是 root 用户,因此只需询问一次密码即可sudo ls
:
sudo -k nice -n -5 su -c "sudo ls" root
附言:为了进行测试,我使用了 而不是 dosemu,sleep 120
以sudo -k
提高安全性。
答案3
尝试:sudo -s -H
它会以 root 身份登录,之后您将不需要 sudo。
然后运行你的脚本。