Uccidi sessione schermo distaccato [chiuso]


864

Ho imparato da qualche parte che uno schermo staccato può essere ucciso da

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

da dove [sessione # che vuoi uccidere] può essere ottenuta

screen -ls

Ma questo non funziona. Qualcosa non va? Qual è il modo corretto?


25
"da qualche parte" non è sempre una buona fonte di informazioni. Prova "man screen".
innaM

27
Il comando corretto èscreen -S sessionname -p 0 -X quit
jimmetry

killall - # screen [# = numero di schermate che vuoi uccidere]
Annuncio

Uso semplicemente exit
TPArrow

CTRL + D quando nella schermata è il comando più semplice.
Don King,

Risposte:


1267

"uccidi" ucciderà solo una finestra dello schermo. Per "uccidere" l'intera sessione, utilizzare quit.

Esempio

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

Per sessioni morte usare: $ screen -wipe


112
digitare 'exit' (senza virgolette) in Ubuntu: P
mzalazar

16
exitfunziona ma deve essere digitato in ogni schermata che è stata aperta. quitnon funziona nemmeno
kapad il

4
@kapad effettivamente smette di funzionare se lo scrivi in ​​linea -X -S pid / sockname esci
Eduard

20
quando l'OSX accede screen -X quita qualsiasi terminale termina tutte le sessioni attive
Michel,

5
Ctrl + D funziona anche
Yi Xin il

499

È possibile interrompere una sessione distaccata che non risponde all'interno della sessione dello schermo procedendo come segue.

  1. Digitare screen -listper identificare la sessione dello schermo staccato.

    ~ $ elenco-schermate  
        Ci sono schermate su:  
             20751.Melvin_Peter_V42 (Staccato)  
    

    Nota: 20751.Melvin_Peter_V42è il tuo ID di sessione.

  2. Collegati alla sessione schermo distaccato

    schermo -r 20751.Melvin_Peter_V42
  3. Una volta connesso alla sessione premere Ctrl+ Aquindi digitare:quit


20
puoi semplicemente usare lo schermo -r 20751 senza il nome completo
Gal Bracha

53
oppure: Ctrl + a, k
laffuste

@laffuste 's commento funzionato per me, ma quite :quitportare a command not foundsul mio server Linux remoto (forse differenze tra le versioni del sistema operativo o lo schermo sono da biasimare)
Hack-R

una volta attaccato allo schermo, exitfunziona anche
PankajKabra il

145

Schermate dell'elenco:

screen -list

Produzione:

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.

Termina sessione schermo:

screen -S 23536 -X quit

1
'screen -ls' funziona anche. ;)
Atul Vaibhav,

113

È più facile uccidere una sessione, quando viene dato un nome significativo:

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

Perché screen -Se no screen -r?
43 Testimoni

1
Questa risposta usa il nome della sessione, che è molto più conveniente che cercare l'ID. Grazie!
Paul Kenjora,

43

Puoi semplicemente andare nel luogo in cui è ospitata la sessione dello schermo ed eseguire:

 screen -ls

che risulta in

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

E basta rimuoverlo:

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

La uscreensdirectory non 26727.pts-0.devxxxcontiene più il file. Ora per assicurarti di digitare questo:

screen -ls

e dovresti ottenere:

Nessun socket trovato in / tmp / uscreens / S-xxx.


4
Questa è l'unica soluzione che funzionerà se lo schermo è "bloccato", vale a dire. non morto, ma non può essere attaccato a.
Redreinard,

Questo mi ha aiutato quando lo schermo era completamente bloccato, ma avevo anche bisogno di trovare e uccidere il processo reale. ps aux | grep screentrovato il pid e ho emesso un killper rimuoverlo. A seconda di ciò che avevi in ​​esecuzione sullo schermo, potresti avere anche file temporanei e blocchi da ripulire.
Lomky,


23

aggiungi questo al tuo ~/.bashrc:

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

Quindi utilizzare cleanscreenper pulire tutte le sessioni dello schermo.


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

3
Ha funzionato a meraviglia, ma ha dovuto modificarlo leggermente per funzionare su OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Jonathan

Leggero miglioramento: -screen -ls | grep allegato | tagliare -d. -f1 | awk '{print $ 1}' | xargs -I {} screen -d {}
Abhay Yadav il


16

Per terminare tutte le sessioni dello schermo distaccato, includi questa funzione nel tuo .bash_profile:

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

per eseguirlo, chiama killd


5
A volte non sono 5 cifre, quindi uso: killd () {per la sessione in $ (screen -ls | grep -o '[0-9] \ +') faccio schermo -S "$ {session}" -X quit; done}
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.

Non sarebbe solo rimuovere il socket, non uccidere il processo dietro di esso?
Martin C.

Questo metodo è rischioso dal punto di vista della creazione di processi zombi?
Fedir RYKHTIK,

5

In alternativa, durante la sessione dello schermo tutto ciò che devi fare è digitare exit

Questo ucciderà la sessione di shell avviata dallo schermo, che termina efficacemente la sessione dello schermo in cui ci si trova.

Non è necessario preoccuparsi dell'ID sessione schermo, ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.