如何以 -20 的不错值启动进程而不为其授予 root 权限?

Lor*_*oh. 23 process priority nice

我想以 -20 的不错值开始一个过程。这需要我使用类似的命令

sudo nice -n -20 matlab
Run Code Online (Sandbox Code Playgroud)

但是,这也以 root 身份启动 matlab。有没有办法让matlab成为非root用户?

我目前的做法是

sudo nice -n -20 sudo -u myusername matlab
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来像一个黑客。有没有直接的方法来做到这一点?

Baa*_*rud 23

我会正常启动它,然后使用“renice”...

但是,我能够与有效的“su”一起进行快速破解:

sudo nice -n -20 su -c command_to_run user_to_run_as
Run Code Online (Sandbox Code Playgroud)

如果你不必给 sudo 一个密码——也许是因为你刚刚给了它——你可以添加一个&把整个事情放在后台。

由于您已经使用 sudo 命令成为 root,su因此不会要求您输入密码。我能够从 X 下的终端仿真器启动 X 程序。如果你想以另一个用户而不是拥有 X 会话的用户身份运行 X 程序,你可能需要明确告诉 X 允许它(为来自该用户的 X 客户端打开)。


小智 10

更进一步@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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加指定用户启动matlab & 权限
    sudo useradd -d /var/lib/matlab sid
    sudo chown sid:sid /var/lib/matlab
    
    Run Code Online (Sandbox Code Playgroud)
  3. 设置用户密码
    sudo passwd sid
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将以下内容附加到 /etc/security/limits.conf
    sid - priority -10
    
    Run Code Online (Sandbox Code Playgroud)
  5. 设置和复制 ssh-key 以自动登录(可选)
    ssh-keygen -t rsa #following key passwd misc   
    ssh-copy-id sid@localhost #using sid's passwd
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  7. 调整“sid”的登录shell
    sudo usermod -s /usr/local/bin/wmatlab sid
    
    Run Code Online (Sandbox Code Playgroud)
  8. 使用sshwith启动 matlabXforward
    ssh -X sid@localhost
    
    Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (3认同)

小智 7

我发现这可以通过修改文件来完成/etc/security/limits.conf(至少在某些 linux 发行版上)。就我而言,我只是补充说:

#<domain>    <type>  <item>  <value>
my_user        -     nice       -20`
Run Code Online (Sandbox Code Playgroud)

然后你可以执行

nice -n -20 matlab

保存更改后注销并重新登录/etc/security/limits.conf

这个答案解释了原因。

  • 进行此更改后,应再次注销/登录:https://unix.stackexchange.com/q/108603/247665 (2认同)