我正在远程服务器上运行一个脚本。我在 screen
中运行了这个脚本,但是因为需要更新脚本,所以需要在脚本完成之前停止它。虽然我可以很容易地从 screen
中分离出来,但是有没有一种方法可以杀掉 screen
进程?
我正在远程服务器上运行一个脚本。我在 screen
中运行了这个脚本,但是因为需要更新脚本,所以需要在脚本完成之前停止它。虽然我可以很容易地从 screen
中分离出来,但是有没有一种方法可以杀掉 screen
进程?
按下CTRL+a,然后再按'k'键将会关闭一个屏幕会话。
有几种在命令行(非交互式地)杀死特定screen会话的“屏幕”方式。
1)发送“quit”命令:
screen -X -S "sessionname" quit
2) 向运行脚本的screen会话发送Ctrl-C:
screen -X -S "sessionname" stuff "^C"
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
测试。之前的答案在我使用winputty终端和亚马逊SSH服务器连接时都没有起作用,但是这个方法确实有效:
screen -S yourscreentitlehere -X stuff $'\003'
参考资料:
>>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
screen(1)
吗?还是你更愿意杀掉在screen(1)
中启动的进程? - sarnoldscreen
中启动的进程。 - David