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?

Tim
la source
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

innaM
la source
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

Melvin Peter
la source
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
nilloc
la source
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
Hitman_99
la source
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.

rc2012
la source
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
29
screen -wipe

Devrait nettoyer toutes les sessions d'écran mort .

Vishv Jeet
la source
11
Que signifie mort? ne pas exécuter de programme?
Shihao Xu
1
@ShihaoXu Dead signifie que la session est inaccessible et sur localhost (la connexion socket est rompue). - voir gnu.org/software/screen/manual/screen.html
iBaff
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.

user2115803
la source
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
21

Pour moi un simple

exit

travaux. C'est à partir de la session d'écran.

Nick Desaulniers
la source
2
aussi, ctrl + a:quit
Nick Desaulniers
2
aussi, ctrl + a, puis K
Nick Desaulniers
Ou tout simplement CTRL + D dans un écran
Frederik Witte
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

Rose Perrone
la source
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.
duggi
la source
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.

dat789
la source