我已经登录服务器。然后发出“screen -list”命令,该命令给出以下输出 -
有一个屏幕:
11048.pts-0.devops(已分离)
27563.pst-0.devops(已分离)
1 个套接字在 /var/run/screen/S-root 中。
现在我必须使用“screen -S -X quit”终止其中一个屏幕会话。在终止之前,我想知道屏幕上正在运行哪个命令。例如,我在 id 为“11048”的屏幕上运行了“./startup.sh”(用于 tomcat),但我忘记了。有没有办法找出 id 为 11048 的屏幕下正在运行哪个命令?
提前致谢
答案1
打开屏幕的语法是:
screen -r <pid>
因此第一个屏幕将是“screen -r 11048” - 要再次分离屏幕,请键入 ctrl+ad(即按住 ctrl 并按下 a,然后释放,然后按下 d)。进入屏幕后,您还可以使用 ctrl+a " 在屏幕之间导航。您还应该知道,如果您只是杀死 11048,则在屏幕 11048 中运行的进程将在屏幕退出后继续运行。
- - 编辑 - -
哦,我明白你的意思了。尝试跟踪子进程:
seqb [~]# ps -ef | grep SCREEN
505 5835 1 0 Jun30 ? 00:00:01 SCREEN
505 19501 1 0 Feb27 ? 00:00:00 SCREEN
505 21852 1 0 Mar02 ? 00:00:07 SCREEN
root 22035 22006 0 19:05 pts/2 00:00:00 grep SCREEN
root 29668 1 0 Jul08 ? 00:00:00 SCREEN
seqb [~]# ps -ef | grep 29668
root 22038 22006 0 19:06 pts/2 00:00:00 grep 29668
root 29668 1 0 Jul08 ? 00:00:00 SCREEN
root 29669 29668 0 Jul08 pts/0 00:00:00 /bin/bash
seqb [~]# ps -ef | grep 29669
root 22047 29669 0 19:08 pts/0 00:00:00 sleep 600
root 22049 22006 0 19:08 pts/2 00:00:00 grep 29669
root 29669 29668 0 Jul08 pts/0 00:00:00 /bin/bash
因此,当您在 ps -ef (29668) 中搜索 screen 的 pid 时,您还会得到将 SCREEN 视为其父级的进程。这通常是 bash。因此,当您搜索 bash 的 pid 时,您会找到在 bash 中运行的进程,在本例中为“sleep 600”。如果不太明白,请运行 ps -ef | head -1。
还有一个快捷方式 - screen 将最后 500 行保存在内存中。输入 ctrl+a [ 然后按向上键。您可以转到输出的顶部,如果输出少于 500 行,则您可以看到正在运行的命令。