我读过this和其他几篇文章,但我无法弄明白。这就是我所说的:
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 ~]$
所以这个过程已经过去了。我尝试过其他几种组合但没有成功。有什么想法使这项工作?
答案 0 :(得分:2)
使用-b
sudo
选项指示它在后台运行给定命令。作业控制不起作用,因为nohup
进程不是当前shell的子进程,而是sudo
进程的子进程。
sudo -b nohup dd if=/dev/zero of=/dev/sda bs=1M
答案 1 :(得分:0)
你没有正确使用disown,正确的参数应该是jobspec('%'+作业号)。
在您的示例中,您应该disown %1
而不是disown 2458
。
要列出当前的shell作业列表,您可以使用bash builtin jobs