我在Ubuntu服务器上运行了多个屏幕,这些屏幕的启动方式如下:
screen -dmS screen1 cmd screen -dmS screen2 cmd etc...
我需要杀死一个屏幕,但不是所有的屏幕。 用它的名字杀死一个特定屏幕的正确命令是什么? 我已经通过手册页阅读,但我似乎无法find我正在寻找的命令。
另外,我想写这个命令到一个bash脚本,所以我不能简单地screen -r screen1然后按Ctrl + X ,我通常会。
从手册页:
-X Send the specified command to a running screen session. You can use the -d or -r option to tell screen to look only for attached or detached screen sessions. Note that this command doesn't work if the session is password protected.
你可以做 :
screen -X -S <sessionid> kill
如果你做一个screen -list ,你会注意到每个屏幕名称都以一个数字开头,这个数字就是屏幕的PID:
$ screen -list There are screens on: 12281.pts-1.jonah (12/21/2009 07:53:19 PM) (Attached) 10455.pts-1.jonah (12/19/2009 10:55:25 AM) (Detached) 2 Sockets in /var/run/screen/S-raphink.
从那里,只要发送一个KILL信号到这个特定的PID:
$ kill 12281
它会杀死特定的屏幕。
defraagh的解决scheme不适合我,但是我可以用Raphink的想法杀死屏幕会话:
screen -list获取进程ID
kill -9 PROCESSID
屏幕划分SESSIONID
你打开一个新的窗口
Ctrl A + C
你关上窗户
Ctrl + D
或在窗口内退出命令
我一直在处理这个如下:
process=$(screen -ls | grep screen1) kill $(echo $process | cut -f1 -d'.') exit
解释是你把screen -ls的输出用grepfind你感兴趣的屏幕,然后把这个string分配给variablesprocess 。
由于screen -ls的输出始终是PID后跟一个句点,所以你可以使用cut来除去句点和其后的所有内容。 在上面的例子中,我们把它放在圆括号里面,并把它提供给kill命令,尽pipe你可以线性地做它,其中可能包括写入临时文件并读取它。
您需要确保您的屏幕名称是唯一的,并且grep只是返回您想要杀死的屏幕的名称。