查找屏幕 ID

查找屏幕 ID

我想使用 PHP 通过 SSH 启动一个程序,效果很好,但现在我想用 PHP 杀死屏幕,但我唯一知道的是屏幕的名称。如何(自动)找到屏幕 ID?

答案1

您可以使用环境变量$STY来确定您是否处于屏幕会话中以及您所在的会话的名称是什么。

例子

最初,我们坐在终端窗口中,而不是屏幕会话内。

$ echo $STY

$

启动屏幕会话:

$ screen -ls
There is a screen on:
    31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.

连接到它:

$ screen -r 31543.tscrn

内屏会话:

$ echo $STY
31543.tscrn
$

杀死一个会话

通过会话的名称,您可以使用 来终止它screen

$ screen -X -S tscrn kill

您也可以使用那里的号码。

$ screen -X -S 31543 kill

确认其已被杀死:

$ screen -ls
No Sockets found in /var/run/screen/S-saml.

答案2

你指的是screen程序吗?screen -ls将列出屏幕进程及其屏幕名称,前面加上它们运行的​​ PID:

screen -S foo
screen -ls

There are screens on:
    8806.foo        (09/08/13 20:05:22)     (Attached)

您可以使用它来终止进程:

kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')

或者,如果您可以使用 ps 识别 php 进程,那么它的父 id 将是 screen,您可以杀死它。 pgrep -U <myusername> -f <name>将帮助找到您想要查找的 php 进程(注意它-f搜索命令参数以及命令名称)。您可能正在运行多个 php 脚本,因此这-f将是一种更好的机制来匹配您的流程。<myusername>将是您的用户名,<name>将是匹配进程的字符串。然后你可以使用它ps -p <pid> -o ppid=来获取屏幕进程 ID 并杀死它。

kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= ) 

相关内容