屏幕向主终端发出信号,表明其已完成并关闭

屏幕向主终端发出信号,表明其已完成并关闭

参考这里关于在后台屏幕会话中运行脚本并自行关闭。

screen -dmS myscreen bash -c 'command1; command2;'

我们如何向主终端发出屏幕 myscreen 已完成执行的信号,以便我可以通知用户?否则它会默默地完成并关闭。

答案1

当您调用 时screen -dm,它会启动一个独立的会话,独立于您当前的 shell。由于新会话不是当前 shell 的子会话,因此您需要使用某种繁忙检查循环自行调查其状态。

一种选择是调查输出screen -ls myscreen并将其与“No Sockets found in...”进行比较(与当前运行的输出“There is a screen on ... (Detached) ... 1 Socket in...”形成对比...”)。这假设您只会运行一个“myscreen”会话:

while ! screen -ls myscreen | grep -q 'No Sockets found in'; do sleep 1; done

screen -ls命令只是解析出套接字目录中的内容;你可以自己去那里看看。套接字文件一般放在$SCREENDIR;在我测试的系统上,SCREENDIR=/var/run/screen.只要至少有一个文件与通配符匹配,下面的循环就会成功,当不再存在这样的文件时,循环就会退出:

while ls /var/run/screen/S-"$LOGNAME"/*.myscreen > /dev/null 2>&1; do sleep 1; done

这仍然依赖于这样的假设:您只启动了一个名为“myscreen”的屏幕会话。

如果您可能启动多个同名会话,则必须更加小心地挑选与每个会话对应的 PID。

相关内容