为什么“jobs”不显示我在后台打开的ssh隧道?

我开始这样一个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。