Tuer la session d'écran détaché [fermé]


864

J'ai appris quelque part qu'un écran détaché peut être tué par

screen -X -S [session # you want to kill] kill

où [session # que vous voulez tuer] peut être obtenue

screen -ls

Mais ça ne marche pas. Quelque chose ne va pas? Quelle est la bonne façon?


25
«quelque part» n'est pas toujours une bonne source d'information. Essayez "écran homme".
innaM

27
La commande correcte estscreen -S sessionname -p 0 -X quit
jimmetry

killall - # écran [# = nombre d'écrans que vous voulez tuer]
CArnold

J'utilise simplement exit
TPArrow

CTRL + D à l'écran est la commande la plus simple.
Don King

Réponses:


1267

"tuer" ne tuera qu'une seule fenêtre d'écran. Pour "tuer" la session complète, utilisez quit.

Exemple

$ screen -X -S [session # you want to kill] quit

Pour les sessions mortes, utilisez: $ screen -wipe


112
tapez 'exit' (sans les guillemets) dans ubuntu: P
mzalazar

16
exitfonctionne mais doit être tapé dans chaque écran qui a été ouvert. quitne fonctionne même pas
kapad

4
@kapad quitte réellement les travaux si vous l'écrivez en ligne -X -S pid / sockname quit
Eduard

20
sur OSX entrer screen -X quitsur n'importe quel terminal met fin à toutes les sessions actives
Michel

5
Ctrl + D fonctionne également
Yi Xin

499

Vous pouvez tuer une session détachée qui ne répond pas dans la session d'écran en procédant comme suit.

  1. Tapez screen -listpour identifier la session d'écran détachée.

    ~ $ screen -list  
        Il y a des écrans sur:  
             20751.Melvin_Peter_V42 (Détaché)  
    

    Remarque: 20751.Melvin_Peter_V42est votre identifiant de session.

  2. Attachez-vous à la session d'écran détachée

    écran -r 20751.Melvin_Peter_V42
  3. Une fois connecté à la session, appuyez sur Ctrl+ Apuis tapez:quit


20
vous pouvez simplement utiliser l'écran -r 20751 sans le nom complet
Gal Bracha

53
ou: Ctrl + a, k
laffuste

@laffuste commentaire de » travaillé pour moi, mais quitet :quitconduire à command not foundmon serveur Linux à distance (peut - être des différences entre les versions du système d' exploitation ou de l' écran sont à blâmer)
Hack-R

une fois attaché à l'écran, exitfonctionne également
PankajKabra

145

Écrans de liste:

screen -list

Production:

There is a screen on:
23536.pts-0.wdzee       (10/04/2012 08:40:45 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

Tuer la session d'écran:

screen -S 23536 -X quit

1
'screen -ls' fonctionne également. ;)
Atul Vaibhav

113

Il est plus facile de tuer une session, quand un nom significatif est donné:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit

Pourquoi screen -Set non screen -r?
43Tesseracts

1
Cette réponse utilise le nom de la session, ce qui est beaucoup plus pratique que de rechercher l'ID. Merci!
Paul Kenjora

43

Vous pouvez simplement vous rendre à l'endroit où la session d'écran est hébergée et exécutée:

 screen -ls

ce qui se traduit par

 There is a screen on:
         26727.pts-0.devxxx      (Attached)
 1 Socket in /tmp/uscreens/S-xxx. <------ this is where the session is.

Et il suffit de le retirer:

  1. cd / tmp / uscreens / S-xxx
  2. ls
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. ls

Le uscreensrépertoire ne contiendra plus le 26727.pts-0.devxxxfichier. Maintenant, assurez-vous de taper ceci:

screen -ls

et vous devriez obtenir:

Aucun socket trouvé dans / tmp / uscreens / S-xxx.


4
C'est la seule solution qui fonctionnera si l'écran est "bloqué", c'est-à-dire. pas mort, mais ne peut être attaché.
redreinard

Cela m'a aidé lorsque l'écran était complètement verrouillé, mais j'avais également besoin de trouver et de tuer le processus réel. ps aux | grep screentrouvé le pid et j'ai émis un killpour l'enlever. Selon ce que vous avez exécuté sur votre écran, vous pouvez également avoir des fichiers temporaires et des verrous à nettoyer.
Lomky


23

ajoutez ceci à votre ~/.bashrc:

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit"

Ensuite, utilisez cleanscreenpour nettoyer toutes les sessions d'écran.


11
Un simple one-liner:screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
Ariel le

3
A fonctionné un régal, mais a dû le modifier légèrement pour travailler sur OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Jonathan

Légère amélioration: -screen -ls | grep Attaché | couper -d. -f1 | awk '{print $ 1}' | xargs -I {} screen -d {}
Abhay Yadav


16

Pour tuer toutes les sessions d'écran détachées, incluez cette fonction dans votre .bash_profile:

killd () {
for session in $(screen -ls | grep -o '[0-9]\{5\}')
do
screen -S "${session}" -X quit;
done
}

pour l'exécuter, appelez killd


5
Parfois, ce n'est pas 5 chiffres, donc j'utilise: killd () {pour la session dans $ (screen -ls | grep -o '[0-9] \ +') do screen -S "$ {session}" -X quit; fait}
Kostyantyn

7
== ISSUE THIS COMMAND
[xxx@devxxx ~]$ screen -ls


== SCREEN RESPONDS
There are screens on:
        23487.pts-0.devxxx      (Detached)
        26727.pts-0.devxxx      (Attached)
2 Sockets in /tmp/uscreens/S-xxx.


== NOW KILL THE ONE YOU DONT WANT
[xxx@devxxx ~]$ screen -X -S 23487.pts-0.devxxx kill


== WANT PROOF?
[xxx@devxxx ~]$ screen -ls
There is a screen on:
        26727.pts-0.devxxx      (Attached)
1 Socket in /tmp/uscreens/S-xxx.

Cela ne supprimerait-il pas simplement le socket, ne tuerait-il pas le processus derrière?
Martin C.

Cette méthode est-elle risquée du point de vue de la création de processus zombies?
Fedir RYKHTIK

5

Alternativement, pendant votre session écran, tout ce que vous avez à faire est de taper exit

Cela tuera la session shell lancée par l'écran, ce qui termine effectivement la session écran sur laquelle vous vous trouvez.

Pas besoin de s'embêter avec l'identifiant de session écran, etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.