如何在Linux中停止屏幕进程?

72

我正在远程服务器上运行一个脚本。我在 screen 中运行了这个脚本,但是因为需要更新脚本,所以需要在脚本完成之前停止它。虽然我可以很容易地从 screen 中分离出来,但是有没有一种方法可以杀掉 screen 进程?


1
你真的想要杀掉 screen(1) 吗?还是你更愿意杀掉在 screen(1) 中启动的进程? - sarnold
2
适合发布在superuser.com上。 - Jim Garrison
我想要杀掉在screen中启动的进程。 - David
5个回答

110

按下CTRL+a,然后再按'k'键将会关闭一个屏幕会话。


谢谢!我刚刚添加了一个终端热键,它是"\001ky"(Ctrl-A,k和y代表“是”)。另外,我还有一个绑定到“Home”键的热键,它是“cd〜/ Enter”。没有什么地方比cd〜/更好了。 - Andreas

74

有几种在命令行(非交互式地)杀死特定screen会话的“屏幕”方式。

1)发送“quit”命令:

screen -X -S "sessionname" quit

2) 向运行脚本的screen会话发送Ctrl-C:

screen -X -S "sessionname" stuff "^C"

在这两种情况下,您需要使用 'screen -ls' 命令查找要终止的 screen 会话名称。如果只有一个 screen 会话在运行,则无需指定 -S "sessionname" 参数。

9
我使用以下命令停止数百个由有缺陷的命令创建的错误屏幕会话: for s in $(screen -ls|grep -o -P "1\d+.tty"); do screen -X -S $s quit; done; 其中: grep -o -P "1\d+.tty" 是获取具有 Perl 样式名称正则表达式 "1\d+.tty" 的会话名称的命令,它捕获所有以数字 1 开头的会话,有一些其他数字(\d)并以 .tty 结尾。 警告: 在应用上述命令之前,您应首先使用此命令进行测试,以查看是否获得了准确的会话列表。这是为了避免退出不需要的会话: for s in $(screen -ls|grep -o -P "1\d+.tty"); do echo $s; done; 每当for循环中的子命令生成的列表不明确时,例如通过$()扩展生成的列表时,我总是进行此echo测试。

5

太棒了!这就是我一直在寻找的!其他解决方案都不能停止屏幕会话,如果它正在运行活动进程。 - Tom Chapin

2
我正在使用putty,看起来我已经进入了屏幕并且无法打开或关闭。每次我执行“exit”命令时,它只是关闭了putty窗口。以下是终端输出:

>>screen -r
    21063.unlimited (11/08/20 15:45:19)     (Attached)
    24054.cure6     (11/08/20 09:46:13)     (Attached)

没有屏幕可以恢复。 而且

screen -S 21063.unlimited -X stuff $'\003'

没有任何作用。 我发现只需简单的以下一行即可完美解决

screen -x 21063.unlimited

它将我带回到屏幕上,然后“退出”就可以了。 请注意,小写字母-x


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接