如何以-20的nice值启动一个进程而不给它root权限?

如何以-20的nice值启动一个进程而不给它root权限?

我想以 -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-- 随意更改

  1. 创建 matlab 元数据目录
    sudo mkdir /var/lib/matlab
    
  2. 添加指定用户启动matlab并授予权限
    sudo useradd -d /var/lib/matlab sid
    sudo chown sid:sid /var/lib/matlab
    
  3. 设置用户密码
    sudo passwd sid
    
  4. 将以下内容附加到/etc/security/limits.conf
    sid - priority -10
    
  5. 设置并复制 ssh 密钥以自动登录(可选)
    ssh-keygen -t rsa #following key passwd misc   
    ssh-copy-id sid@localhost #using sid's passwd
    
  6. 创建 matlab shell 包装器(修复静默失败错误
    sudo -i
    cat &lt;&lt;EOF &gt;&gt;/usr/local/bin/wmatlab
    #!/bin/bash --
    # A wrapper to launch matlab
    /usr/local/MATLAB/&lt;version&gt;/bin/matlab -desktop
    EOF
    chmod +x /usr/local/bin/wmatlab
    
  7. 调整“sid”的登录shell
    sudo usermod -s /usr/local/bin/wmatlab sid
    
  8. ssh使用with启动 matlabXforward
    ssh -X sid@localhost
    

答案4

正如 @jordanm 所说,放弃 sudo。您可以优化自己的进程以给予它们较低的优先级:

nice -20 matlab

sudo

相关内容