【问题标题】:nohup'ing a sudo command - doesn't seem to worknohup 执行 sudo 命令 - 似乎不起作用
【发布时间】:2014-02-03 16:41:59
【问题描述】:

我已经阅读了this 和其他几篇文章,但我无法弄清楚这一点。这是我整理的:

  1. sudo nohup 或 nohup sudo (我都试过了)没有背景的命令& (所以你可以在分离之前输入你的密码)
  2. 输入密码
  3. ^Z 然后bg
  4. disown pid(由于某种原因不起作用)
  5. 注销

这是输出:

[user@localhost ~]$ nohup sudo dd if=/dev/zero of=/dev/sda bs=1M
nohup: ignoring input and appending output to ‘nohup.out’
[sudo] password for user: 
^Z
[1]+  Stopped                 nohup sudo dd if=/dev/zero of=/dev/sda bs=1M
[user@localhost ~]$ bg
[1]+ nohup sudo dd if=/dev/zero of=/dev/sda bs=1M &
[user@localhost ~]$ sudo ps | grep dd
 2458 pts/32   00:00:00 dd
[user@localhost ~]$ disown 2458
-bash: disown: 2458: no such job
[user@localhost ~]$ logout
Connection to [server] closed.
$ remote
Last login: Mon Feb  3 11:32:59 2014 from [...]
[user@localhost ~]$ sudo ps | grep dd
[sudo] password for user: 
[user@localhost ~]$

所以这个过程就结束了。我尝试了其他一些组合,但没有成功。有什么想法可以完成这项工作吗?

【问题讨论】:

    标签: bash background-process sudo nohup


    【解决方案1】:

    使用sudo 的-b 选项来指示它在后台运行给定的命令。作业控制不起作用,因为 nohup 进程不是当前 shell 的子进程,而是 sudo 进程的子进程。

    sudo -b nohup dd if=/dev/zero of=/dev/sda bs=1M
    

    【讨论】:

      【解决方案2】:

      您没有正确使用 disown,正确的参数应该是 jobspec ('%' + job number)。

      在您的示例中,您应该使用 disown %1 而不是 disown 2458。

      要列出您当前的 shell 作业列表,您可以使用 bash 内置 jobs

      【讨论】:

      • 不,它不起作用。我可以disown %1 并从jobs 消失,但注销后该过程仍然消失。无论我使用sudo nohup ... 还是仅使用sudo ...,都会发生这种情况。
      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 2023-04-10
      • 2011-10-18
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多