Tuez toutes les sessions d’écran détachées

Lorsque screen -ls , je vois ce qui suit. Comment puis-je tuer toutes les sessions détachées?

Il y a des écrans sur:

  84918.ttys002.ros-mbp (Detached) 84944.ttys008.ros-mbp (Detached) 84970.ttys013.ros-mbp (Attached) 84998.ttys002.ros-mbp (Detached) 85024.ttys002.ros-mbp (Detached) 

5 sockets dans /var/folders/86/062qtcyx2rxbnmn8mtpkyghs0r0r_z/T/.screen.

screen -ls | grep pts | cut -d. -f1 | awk '{print $1}' | xargs kill

Ne tuer que les sessions d’écran détachées (credit @schatten):

screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill

Voici une solution qui combine toutes les réponses: Ajoutez ceci à votre .bash_profile .bashrc ou .bash_profile :

 killscreens () { screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill } 
  • c’est une fonction pratique, facile à retenir
  • ne tue que les écrans détachés, pour vous empêcher de faire quelque chose de stupide
  • N’oubliez pas d’ouvrir un nouveau terminal bash ou d’exécuter source .bashrc pour rendre les killscreens disponibles

Merci à @Rose Perrone, @Milind Shah et @schatten

Inclure cette fonction dans votre fichier .bash_profile:

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

Pour l’exécuter, appelez killd . Cela va tuer toutes les sessions d’écran, détachées ou non.

Si les écrans sont morts, utilisez:

 screen -wipe 
 '[0-9]\{3,\}' 

en cas de

 There is a screen on: 20505.blabla (03/05/2014 22:16:25) (Detached) 1 Socket in /var/run/screen/S-blabla. 

correspondra à la fois à 20505 et à 2014, où le retrait de 2014 renverra “Aucune session d’écran trouvée”.

 [0-9]\{3,\}\.\S* 

pourrait fonctionner.

J’ai toujours rencontré le pattern 20505. name , où name est soit un nom d’hôte, soit un nom de session si l’écran a été lancé avec l’option -S. Fonctionne sur OS X et Debian, peut ne pas être universel.