Shell:如何在Shell脚本中使用screen并等待几个后台进程

Shell:如何在Shell脚本中使用screen并等待几个后台进程,shell,parallel-processing,wait,gnu-screen,Shell,Parallel Processing,Wait,Gnu Screen,我正在为几个长时间运行的进程编写一个shell脚本。 首先,我需要运行screen会话管理器中的所有命令,以便在用户断开连接时进程的执行不会结束。 稍后,我需要等待一些以前创建的后台进程结束,以便可以启动下面的进程 我的问题是如何在shell脚本中启动屏幕会话并等待后台进程结束。您不能在运行的进程上调用screen(或nohup),您必须执行屏幕脚本。不过,您可以像nohup一样,捕获SIGHUP并将输出重定向到文件 exec > OUT 2>&1 trap '' 1 要等

我正在为几个长时间运行的进程编写一个shell脚本。 首先,我需要运行screen会话管理器中的所有命令,以便在用户断开连接时进程的执行不会结束。 稍后,我需要等待一些以前创建的后台进程结束,以便可以启动下面的进程


我的问题是如何在shell脚本中启动屏幕会话并等待后台进程结束。

您不能在运行的进程上调用
screen
(或
nohup
),您必须执行
屏幕脚本
。不过,您可以像nohup一样,捕获SIGHUP并将输出重定向到文件

exec > OUT 2>&1
trap '' 1
要等待后台进程,请在创建pid时保存它,然后调用wait

foo&
PID1=$!
bar&
PID2=$1
wait $PID1 $PID2
或者干脆等待一切结束

foo&
bar&
wait
谷歌搜索“脚本屏幕”给出了第一个结果。看起来您可以使用
screen-d-m-S nameOfSession
创建命名屏幕会话。然后,
screen-X-S screen
将在屏幕会话'nameOfSession'中创建一个窗口。您可以使用以下命令与此窗口1通信(即,发出此屏幕会话窗口1要运行的命令)

“your_command_here”是您要运行的命令。
^M
是回车控制字符(键入Ctrl-V,然后在终端中输入/回车)。^M基本上会“按回车键/回车键”,以便在此屏幕会话中运行该命令。玩玩它

由于您希望等待命令完成,因此我建议您通过与符号分叉进程:

您的命令&
紧接着,流程分支的流程id以$!。您可以通过运行
wait
来等待所有后台进程完成运行


我会建议。

什么效果好。我在一个字符串变量中的for循环中收集了PID。错误是PID之间没有空格字符。。。我的错:D
screen -X -S test -p 1 stuff "your command here ^M"