找出屏幕会话中正在运行的命令

Aus*_*urk 14 gnu-screen

我经常让任务在屏幕内运行,以便我以后可以检查它们,但有时我需要检查哪个命令在屏幕内运行。它通常是各种 php 脚本,例如

screen -d -m nice -n -10 php -f convertThread.php start=10000
Run Code Online (Sandbox Code Playgroud)

我不记录哪些屏幕正在运行哪些命令,但我希望能够通过检查其中运行的命令来了解所取得的进展,而无需终止进程。

我在屏幕帮助页面中看不到任何选项。

dot*_*hen 22

我最近不得不这样做。在 Stack Overflow 上,我回答了如何找到在 screen 中运行的进程的 PID。获得 PID 后,您可以使用它ps来获取命令。以下是该答案的内容以及一些其他内容来解决您的情况:

您可以在此处获取屏幕会话的 PID,如下所示:

$ screen -ls
There are screens on:
        1934.foo_Server         (01/25/15 15:26:01)     (Detached)
        1876.foo_Webserver      (01/25/15 15:25:37)     (Detached)
        1814.foo_Monitor        (01/25/15 15:25:13)     (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
Run Code Online (Sandbox Code Playgroud)

让我们假设您想要在foo_Monitor屏幕会话中在 Bash 中运行的程序的 PID 。使用foo_Monitorscreen 会话的 PIDbash通过搜索已知 PID 的 PPID(父 PID)来获取在其中运行的会话的 PID:

$ ps -el | grep 1814 | grep bash
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  1815  1814  0  80   0 -  5520 wait   pts/1    00:00:00 bash
Run Code Online (Sandbox Code Playgroud)

现在只获取bash会话的 PID :

$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
Run Code Online (Sandbox Code Playgroud)

现在我们想要具有PID的进程。只需嵌套命令,这次使用-v标志grep bash来获取不是bash的进程:

$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
Run Code Online (Sandbox Code Playgroud)

我们可以使用该 PID 来查找命令(查看第二行的末尾):

$ ps u -p 23869
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ?     Sl   Feb02 1147:09 /usr/lib/foo
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
Run Code Online (Sandbox Code Playgroud)


Gha*_*ima 7

怎么样使用screen -S <your-fancy-name>根据它们运行的命令给屏幕的会议有意义的名称?名称将与 一起列出screen -ls并用于恢复会话screen -r <your-fancy-name>

编辑添加:

因为它在前几天引起了我的注意。tmux提供与screen(如果不是更多)完全相同的功能集,并带有适合您需求的功能。来自常见问题解答:“tmux 支持自动将窗口重命名为正在运行的应用程序,而无需使用转义序列进行粗暴的攻击。默认情况下甚至启用。”