我开始这样一个SSH隧道:
ssh -f -N $PORT:127.0.0.1:$port example.com
-f把ssh放到后台,这就是我想要的。 这是有效的,因为有一个SSH隧道build立。 但是,如果我使用jobs我看不到列出的ssh连接。 怎么来的?
因为你没有使用bash把它发送到后台。 jobs只报告bash本身已经发送到后台的进程; 正如ericslaw所说,它本身就是“守护”的。 要获得工作报告,你可以这样做:
ssh -N $PORT:127.0.0.1:$port example.com &
ssh进程可能被守护进程,从shell断开连接。 你可以这样想(但可能不是这个顺序):
你启动的'ssh'进程实际上closures了所有的文件描述符(stdin,stdout,stderr),从tty断开连接,并为另一个ssh分支。 然后在本身叫做退出。 这个孤儿subprocess和原来的ssh进程实际上“完成”了。
结果,原始的ssh过程完成,孤儿过程不再是你的shell的“子”。
使用'ps -ef'或'ps -fu $ USER'来代替你感兴趣的ssh进程。
您可以使用以下命令查看在port上侦听的程序:
lsof -i :port
它会给你ssh pid。