输入密码后如何将linux终端的作业放到后台?

How can place a job of linux terminal to background after enter password?

我在 linux 终端中使用此命令连接到服务器并将其用作代理:

ssh -N -D 7070 root@ip_address

获取密码并连接,一切正常,但如何将此过程置于后台?

我使用了 CTRL+Z 但它停止了,没有将这个进程置于后台...

尝试在命令末尾添加一个符号:

ssh -N -D 7070 root@ip_address &

解释:

这个尾随的符号在后台将shell指向运行命令,也就是说,它在一个单独的子shell中分叉和运行,作为一项工作,异步。 shell 将立即 return return 状态为 0 并照常继续,要么在脚本中处理进一步的命令,要么 return 将光标焦点返回给用户在 Linux 终端中。

shell 将打印出分叉进程的作业号和进程 ID (PID),如下所示:

$ ./myscript.py &
[1] 1337

分叉进程的标准输出仍将附加到父进程,因此任何输出仍会出现在您的终端中。

在使用单个尾随 & 符号 & 分叉进程后,其进程 ID (PID) 存储在特殊变量 $! 中。这个可以后面参考流程:

$ echo $!
1337

一旦一个进程被分叉,它可以在作业列表中看到:

$ jobs
[1]+  Running                 ./myscript.py &

并且可以在前台命令完成之前将其带回命令行:

fg

如果您分叉了多个进程,则前台命令采用作业编号的可选参数。

单个 & 符号 & 也可以将命令列表分隔为 运行 异步。

./script.py & ./script2.py & ./script3.py & 

在此示例中,所有 3 个 python 脚本同时是 运行,在单独的子 shell 中。它们的标准输出仍将附加到父级 shell,因此如果从 Linux 终端 运行 宁此,您仍然会看到输出。

这也可以用作利用 shell 脚本的多核的快速 hack,但请注意,这是 hack!

要从 shell 中完全分离进程,您可能需要将 stdout 和 stderr 通过管道传输到文件或 /dev/null。一个很好的方法是使用 nohup 命令。

以上解释来源:http://bashitout.com/2013/05/18/Ampersands-on-the-command-line.html

CTRL-Z 正在做它应该做的事情,即停止进程。如果你想把它放在后台,shell 命令是 bg:

$ ssh -N -D 7070 -l user 192.168.1.51
user@192.168.1.51's password: 
^Z
[1]+  Stopped                 ssh -N -D 7070 -l mjfraioli 192.168.1.51
$ bg
[1]+ ssh -N -D 7070 -l user 192.168.1.51 &

这样你就可以交互式地输入密码,只有在输入完成后,才停止输入密码。

您可以添加选项 -f 使 ssh 命令 运行 在后台运行。 所以答案是ssh -f -D port username@hostname -N.