我想使用 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= )