找出萤幕编号


8

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


1
screen还是DISPLAY
奥利(Oli)

Answers:


10

您可以使用环境变量$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.

1

你是说这个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= ) 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.