Bash:在另一个进程期间运行后台服务

我正在运行一些自动脚本。 对于某些任务,我有时需要一个异想天开的背景“服务”来运行。 例如,我想设置一个SSH隧道,运行testing,然后删除隧道。

ATM我使用一些冗长的代码:

#!/usr/bin/env bash function automated_task(){ socksProxyTimeout=120 ssh -A -D 9999 some_server "sleep $socksProxyTimeout; " & sockProxyPid=$! sleep 3 function cleanUp(){ echo shutting down background processes... kill -9 $sockProxyPid || true cd ../../ } trap 'cleanUp' EXIT run_selenium_with_proxy } automated_task 

我不喜欢这个解决scheme,因为我认为只有在整个脚本退出时才会调用cleanup,而不仅仅是“automated_task”。 我真的希望尽可能使本地代码。 我真正想要做的只是指定后台进程只在前台进程仍在运行的情况下运行。

我会尝试存储这里指示的subprocessID

 sshPID="" disconnect() if [ "x$sshPID" != "x" ]; then kill "$sshPID" sshPID="" fi } connect() { ssh -A -D 9999 some_server "sleep $socksProxyTimeout; " & sshPID=$! trap 'disconnect' EXIT } connect sleep 3 disconnect 

您可能能够使用ssh -O exit some_server而不是kill,具体取决于您是否使用ControlMaster设置。 (请参阅ssh文档)。