如何检查屏幕会话是否正在运行?

Haz*_*ood 3 bash gnu-screen

有没有办法检查屏幕会话是否正在 bash 中运行?
例如:

if [screen is running]
  then
    screen -r          #if session is running then resume the session
  else
    screen "command"   #else start a new session
fi
Run Code Online (Sandbox Code Playgroud)

wal*_*tor 5

利用PPID(Parent PID) 环境变量,并从

$ ps -fp$PPID
UID        PID  PPID  C STIME TTY          TIME CMD
w3       19305 19304  0 00:00 ?        00:00:00 SCREEN
+w3@aardvark:~(0)$ 
Run Code Online (Sandbox Code Playgroud)

或者,

ps -fp$PPID | head -n 2 | tail -n 1 | egrep -q SCREEN
screen_is_running=$((1 - ${PIPESTATUS[-1]}))
# screen_is_running == 1 for yes, 0 for No, -1 for egrep error
Run Code Online (Sandbox Code Playgroud)

当然,如果您已经生成、执行、nohup 或其他操作,并且使您的屏幕$PPID不被屏蔽,那么这将不起作用。

如果是这种情况,您可以使用pgrep,构建pstree一些egrep可以沿着$PPID链返回的东西(当为 1 时停止$PPID)。