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


19

我有多个在Ubuntu服务器上运行的屏幕,它们被初始化为:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

我需要杀死一个屏幕,但不是全部。用其名称杀死单个特定屏幕的正确命令是什么?我已经通读了手册页,但似乎找不到所需的命令。

另外,我想将此命令写入bash脚本中,所以我不能像往常一样简单地screen -r screen1Ctrl+ X


抱歉,以为这是关于金刚秒的消息
Chopper3


这是一个不错的发球台,除非有人看过《金刚之王》,否则大多数人不会得到它:imdb.com/title/tt0923752
BassKozz

短语对象的正确单词是“ thee”。
暂停,直到另行通知。

3
您在这里说“您懂”,在下面说“谢谢”。应该是“为您得到”和“感谢您”。
暂停,直到另行通知。

Answers:


19

从手册页:

   -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

完善!!!谢谢黛芙拉,穆斯塔错过了那个男人。
BassKozz


9

如果执行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

它将杀死特定的屏幕。


这是行不通的,因为我是从bash脚本运行它的,而我不必从与正确屏幕匹配的screen -list中拉出PID。谢谢你
BassKozz

好的,很高兴defraagh为此提供了完美的解决方案。
ℝaphink

1

defraagh的解决方案对我不起作用,但是我可以使用Raphink的想法取消屏幕会话:

屏幕列表获取进程ID

杀死-9 PROCESSID

屏幕擦拭SESSIONID


1

如果您有多个同名的屏幕,可以立即将其杀死:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • 命令screen -ls打印屏幕及其进程号。例如,4773.test是一个屏幕,其进程号为4773,名称为test。样本输出:

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • 命令egrep上面的示例文本过滤器通过管道线路发送|

  • 命令awk -F "." '{print $1}'提取每行的第一列。列之间的分隔符由选项-F定义为点(。)
  • 最后,命令xargs kill将杀死所有通过管道|发送其编号的进程。xargs当我们要在每个输入上执行命令时使用。

0

您打开一个新窗口

Ctrl A + C

您关闭一个窗口

Ctrl + D

或在窗口中退出命令


0

香港专业教育学院一直在处理如下:

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

解释是screen -ls通过使用grep 获取输出并找到您感兴趣的特定屏幕,然后将该字符串分配给变量process

由于输出screen -ls始终是PID后面跟一个句点,因此您可以使用cut删除该句点及其后的所有内容。在上面的示例中,我们将其放在括号中并提供给kill命令,尽管您可以线性地执行它,这可能包括写入临时文件并从中读取。

您需要确保您的屏幕名称是唯一的,并且grep仅返回您要杀死的屏幕的名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.