我想以 -20 的良好值启动一个进程。这需要我使用类似的命令
sudo nice -n -20 matlab
但是,这也会以 root 身份启动 matlab。有没有办法让matlab成为非root?
我目前的做法是
sudo nice -n -20 sudo -u myusername matlab
对我来说这看起来像是一个黑客。有没有直接的方法来做到这一点?
答案1
我会正常启动它,然后使用“renice”......
然而,我能够与“su”一起进行快速破解,它有效:
sudo nice -n -20 su -c command_to_run user_to_run_as
如果您不必为 sudo 提供密码 - 也许是因为您刚刚已经提供了密码 - 您可以添加一个&
来将整个过程放在后台。
由于您已经使用 sudo 命令成为 root,因此su
不会要求您输入密码。我能够从 X 下的终端仿真器启动 X 程序。如果您想以拥有 X 会话的用户以外的其他用户身份运行 X 程序,您可能需要明确告诉 X 允许它(对该用户的 X 客户端开放)。
答案2
我发现这可以通过修改文件来完成/etc/security/limits.conf
(至少在某些 Linux 发行版上)。就我而言,我只是添加了:
#<domain> <type> <item> <value>
my_user - nice -20`
然后你可以执行
nice -n -20 matlab
将更改保存到 后注销并重新登录/etc/security/limits.conf
。
这回答解释了原因。
答案3
更进一步@Jordan:这是针对sudo nice -n -xx su <username> -c matlab
黑客的优雅解决方案。
注意:使用 username=
sid
、matlab meta-data dir=/var/lib/matlab
、nice=-10
-- 随意更改
- 创建 matlab 元数据目录
sudo mkdir /var/lib/matlab
- 添加指定用户启动matlab并授予权限
sudo useradd -d /var/lib/matlab sid sudo chown sid:sid /var/lib/matlab
- 设置用户密码
sudo passwd sid
- 将以下内容附加到
/etc/security/limits.conf
sid - priority -10
- 设置并复制 ssh 密钥以自动登录(可选)
ssh-keygen -t rsa #following key passwd misc ssh-copy-id sid@localhost #using sid's passwd
- 创建 matlab shell 包装器(修复静默失败错误)
sudo -i cat <<EOF >>/usr/local/bin/wmatlab #!/bin/bash -- # A wrapper to launch matlab /usr/local/MATLAB/<version>/bin/matlab -desktop EOF chmod +x /usr/local/bin/wmatlab
- 调整“sid”的登录shell
sudo usermod -s /usr/local/bin/wmatlab sid
ssh
使用with启动 matlabXforward
ssh -X sid@localhost
答案4
正如 @jordanm 所说,放弃 sudo。您可以优化自己的进程以给予它们较低的优先级:
nice -20 matlab
不sudo
。