我使用程序协同与ssh隧道
@H_301_21@
我的第一个想法是,你需要在后台启动进程,以获得他们的PID与$!。
它的工作,我只是打开一个控制台类型这两个命令:
ssh -f -N -L localhost:12345:otherHost:12345 otherUser@OtherHost synergyc localhost
因为我做了一个Bash脚本,它运行在一个图标上的一个mouseclick:
#!/bin/bash ssh -f -N -L localhost:12345:otherHost:12345 otherUser@OtherHost synergyc localhost
上面的Bash脚本也工作,但现在我也想杀死协同作用和ssh隧道通过一个mouseclick,所以我必须保存协同和ssh的PID到文件,以后杀死他们:
#!/bin/bash mkdir -p /tmp/synergyPIDs || exit 1 rm -f /tmp/synergyPIDs/ssh || exit 1 rm -f /tmp/synergyPIDs/synergy || exit 1 [ ! -e /tmp/synergyPIDs/ssh ] || exit 1 [ ! -e /tmp/synergyPIDs/synergy ] || exit 1 ssh -f -N -L localhost:12345:otherHost:12345 otherUser@OtherHost echo $! > /tmp/synergyPIDs/ssh synergyc localhost echo $! > /tmp/synergyPIDs/synergy
但是这个脚本的文件是空的。
如何获得ssh和协同作用的PID?
(我试图避免ps aux | grep … | awk … | sed …组合,有一个更简单的方法。)
模式喜欢
some_program & some_pid=$! wait $some_pid
可能会做你需要的…除了那样ssh将不会在前台要求密码短语。
那么,你可能需要不同的东西。 ssh -f可能产生一个新的进程,你的shell永远不能从调用它。理想情况下,ssh本身将提供一种方式将其PID写入某个文件。