列出屏幕内运行的进程(带有 VT100/ANSI 终端仿真的管理器)

列出屏幕内运行的进程(带有 VT100/ANSI 终端仿真的管理器)

我有一个应用程序,在安装过程中通过屏幕运行一堆进程,所以我可以看到那些附加到屏幕上的进程,但是我没有通过“ps -ef”或“ps auxww”看到它们。如何列出屏幕内运行的所有进程?

谢谢。

答案1

start cmd: # screen -ls
There is a screen on:
        24525.pts-0.syscontrol  (Attached)
start cmd: # pstree -p 24525
screen(24525)─┬─bash(10773)───su(10790)───bash(10791)
              ├─bash(10863)───pstree(11099)
              └─bash(24526)

答案2

使用pstree大大简化了问题,但一些澄清可能会有所帮助。

当您启动时screen,它会运行两个进程,screen(父进程)和SCREEN(子进程):

  • 选项显示带有子进程 ID 的会话标识符-lsscreen
  • 您应该列出父进程 ID 以保持一致性。
  • 它有助于显示参数列表;pstree可以做到这一点。
  • 您可以在同一台计算机上有多个屏幕会话。

将这些结合在一起需要一个脚本。这是一个例子:

# $Id: ps-screen,v 1.1 2016/10/23 22:19:56 tom Exp $
# http://unix.stackexchange.com/questions/172347/list-processes-running-inside-of-screen-manager-with-with-vt100-ansi-terminal-e
screen -ls | awk '/[0-9]+\./{print;}' | while read session
do
    child=$(echo "$session" | awk '{sub("\..*","",$1); print $1;}')
    printf '%s\n' "$session"
    parent=$(ps -p $child -o ppid=)
    pstree -p -a $parent
done

以及两个会话的示例输出:

~ (101) ps-screen 
38142.pts-1.vmw-debian7-64      (10/23/2016 06:20:28 PM)        (Attached)
screen,38141
  └─screen,38142
      └─tcsh,38143
          └─ps-screen,38161 /users/tom/bin/ps-screen
              └─ps-screen,38164 /users/tom/bin/ps-screen
                  └─pstree,38169 -p -a 38141
3975.pts-0.vmw-debian7-64       (10/23/2016 06:15:28 AM)        (Attached)
screen,3974
  └─screen,3975
      ├─tcsh,5002
      │   └─ded,19926 /usr/build//ncurses
      │       └─vile,24647 /usr/build/ncurses/ncurses-6.0-20161029/NEWS
      └─tcsh,36551
          └─ded,36569 /tmp

进一步阅读:

答案3

screen -ls然后检索 tty(pty) ,ps -t ttyname或者ps t ttyname将显示与 ttyname 关联的进程列表。

Ubuntu 上的 ps(1) 联机帮助页 Ubuntu 上的 screen(1) 联机帮助页

相关内容