为什么“工作”没有显示我在后台打开的 ssh 隧道?

Ama*_*rus 0 ssh bash process

我正在启动这样的 ssh 隧道:

ssh -f -N $PORT:127.0.0.1:$port example.com
Run Code Online (Sandbox Code Playgroud)

-f放ssh到后台,这就是我想要的。这是有效的,因为设置了 SSH 隧道。但是如果我使用,jobs我看不到列出的 ssh 连接。怎么来的?

eri*_*law 5

ssh 进程可能已被守护进程,与 shell 断开连接。你可以这样想(但可能不是按这个顺序):

您启动的“ssh”进程实际上关闭了所有文件描述符(stdin、stdout、stderr),与 tty 断开连接,并分叉了另一个子 ssh。然后自行调用 exit 。这会孤立子进程,而原始 ssh 进程实际上“完成”。

因此,原始 ssh 进程已完成,孤立进程不再是 shell 的“子进程”。

使用“ps -ef”或“ps -fu$USER”来查看您感兴趣的 ssh 进程。


Kev*_*n M 5

因为您没有使用 bash 将其发送到后台。jobs只报告 bash 本身发送到后台的进程;正如 ericslaw 所说,是 ssh 本身“守护”了它。要让工作报告它,你会这样做:

ssh -N $PORT:127.0.0.1:$port example.com &
Run Code Online (Sandbox Code Playgroud)