杀一个屏幕(但不是所有的屏幕)

我在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只是返回您想要杀死的屏幕的名称。