2011-06-10 45 views
27

我正在遠程服務器上運行腳本。我在screen中運行了該腳本,但是在完成之前我需要停止它,因爲我需要更新腳本。我可以很容易地從screen分離,但是,有沒有辦法殺死screen進程?如何在Linux中停止屏幕進程?

+0

你真的想殺死'screen(1)'嗎?或者你寧願殺死你在screen(1)'裏面開始的過程? – sarnold 2011-06-10 04:06:15

+1

屬於superuser.com – 2011-06-10 04:06:15

+0

我想殺死我在'screen'開始的進程。 – David 2011-06-10 04:08:15

回答

48

CTRL + a然後'k'會殺死一個屏幕會話。

+0

完美,謝謝。 – David 2011-06-10 04:09:45

21

有幾種「屏幕」方法可以從命令行中(非交互式)殺死特定的屏幕會話。

1)發送 '退出' 命令:

screen -X -S "sessionname" quit 

2)將Ctrl-C到屏幕會話中運行的腳本:

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

在這兩種情況下,你需要使用'screen -ls'查找想要殺死的屏幕會話的會話名稱...如果只有一個屏幕會話正在運行,則不需要指定-S「sessionname」參數。

2

我用這個退出數百由馬車命令創建的錯誤屏幕會話:

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;

我總是對這個echo測試每當for循環列表是不明確的,例如,在$()擴張的子命令生成的一個。