我正在启动这样的 ssh 隧道:
ssh -f -N $PORT:127.0.0.1:$port example.com
将-f
ssh 置于后台,这正是我想要的。这有效,因为设置了 SSH 隧道。但如果我使用,jobs
我看不到列出的 ssh 连接。为什么?
答案1
因为您没有使用 bash 将其发送到后台。jobs
仅报告 bash 本身发送到后台的进程;正如 ericslaw 所说,是 ssh 本身将其“守护”了。要让作业报告它,您需要执行以下操作:
ssh -N $PORT:127.0.0.1:$port example.com &
答案2
ssh 进程可能已守护,与 shell 断开连接。您可以这样想(但可能不是按此顺序):
您启动的“ssh”进程实际上关闭了它的所有文件描述符(stdin、stdout、stderr),断开了与 tty 的连接,并分叉了另一个子 ssh。然后对其自身调用 exit。这使子进程成为孤立进程,而原始 ssh 进程实际上“完成”。
因此,原始 ssh 进程已完成,并且孤立进程不再是 shell 的“子进程”。
使用“ps -ef”或“ps -fu$USER”来查看您感兴趣的 ssh 进程。
答案3
您可以使用命令查看正在监听的程序port
:
lsof -i :port
它会给你 ssh pid。