我已经阅读了此书和其他几篇文章,但我无法弄清楚。这就是我组合的:
-
sudo nohup
或nohup sudo
(我已经尝试过)没有背景&
的命令(因此您可以在分离之前输入密码) - 输入密码
-
^Z
然后bg
-
disown
PID(由于某种原因不起作用) - 注销
这是输出:
[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 ~]$
使过程消失了。我尝试了其他一些组合,但没有成功。有什么想法可以使这项工作?
使用-b
选项sudo
将其指示在后台运行给定命令。工作控制不起作用,因为nohup
过程不是当前外壳的孩子,而是sudo
进程的孩子。
sudo -b nohup dd if=/dev/zero of=/dev/sda bs=1M
您没有正确使用拒绝,正确的参数应为jobspec('%' 作业号)。
在您的示例中,您应该具有disown %1
而不是disown 2458
。
用于列出当前的外壳作业列表,您可以使用bash内置jobs