uccidere una sessione dello schermo


66

Sto cercando di uccidere una sessione sullo schermo. Ho notato molte altre domande correlate, ma nessuna di quelle risposte funziona per me. Sto cercando di uccidere la seguente sessione:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

Ora sono nella sessione. Secondo la documentazione:

http://www.gnu.org/software/screen/manual/screen.html#Quit

Dovrei premere "control a" e poi "control \". Lo faccio e non succede nulla.

Un'altra soluzione ha detto di premere Ctrl+ ae digitare: quit. Tuttavia, di nuovo non fa nulla. Infatti, premendo control+ a, non succede assolutamente nulla dopo il messaggio "Nessuna altra finestra"


1
nella schermata v4.x, per uccidere tutte le sessioni,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss,

2
Per la cronaca, puoi semplicemente fare screen -r porkypigo screen -r 23520, anziché dover includere la stringa completa. I nomi delle schermate dovrebbero rendere le cose più facili, non più complicate.
Mikkel,

Risposte:


73

per prima cosa devi ricollegarti alla sessione dello schermo
screen -r 23520come hai fatto. Quindi premi ctrl+ ae poi un capitale Ke premi yquando ti viene chiesto se vuoi davvero uccidere la sessione


2
Funziona se c'è un problema con un processo in esecuzione all'interno dello schermo, ma non se c'è un problema con lo schermo stesso. Questo è il caso del 99% delle volte e ha l'ulteriore vantaggio di influenzare solo una singola finestra all'interno dello schermo anziché terminare tutte le finestre.
Mikkel,

1
È uccidere una finestra, non una sessione
Eric Wang il

57

Puoi chiudere quella schermata senza collegarti ad essa. Innanzitutto, trova la sua sessione:

$ screen -ls

e poi uscire:

$ screen -XS [session # you want to quit] quit

(-X = comando Esegui, -S PID sessione su cui eseguire)

[AGGIORNARE]

Esempio:

screen -XS 20411 quit

1
Questo è stato piuttosto semplice. Puoi semplificarlo ancora di più combinando -X -S con -XS
AJ.

2
Dovresti dare credito alla risposta innaM se la copi
Martin Thoma,

8

Questo ucciderà tutti gli schermi staccati:

schermo -ls | grep distaccato | tagliare -d. -f1 | awk '{print $ 1}' | xargs uccide

Questo ucciderà tutti gli schermi, collegati o staccati

schermo -ls | grep pts | tagliare -d. -f1 | awk '{print $ 1}' | xargs uccide

7

Quindi, con tutti quei suggerimenti ufficiali, lasciamo andare qualcosa di più semplice, altrettanto efficace e un po 'più semplice.

pkill screen

Chi vuole entrare in uno schermo sconosciuto e non necessario solo per premere un paio di comandi che molti potrebbero ricordare a malapena? Questo evita di entrarci dentro e lo uccide immediatamente.

Inoltre, se ne hai più di uno, questo li porterà tutti in un colpo solo.


1
Nota che questo ucciderà tutte le schermate in esecuzione, che potrebbero essere o meno ciò che desideri.
Mikkel,

Non è una buona scelta. Lo sto facendo da un po 'di tempo. A volte provoca comportamenti scorretti (es. Disconnettersi immediatamente dal proprio account utente). Inoltre, come menzionato da @Mikkel, potrebbe causare la chiusura di tutti i tuoi schermi, che non sarebbe quello che desideri. A volte è necessario continuare a eseguirne alcuni (ad esempio alcuni sono in esecuzione dal sistema) e interrompere alcune altre schermate.
MAChitgarha,

2

Ho riscontrato questo problema durante l'aggiornamento della schermata. Il screencomando si bloccherebbe quando si tenta di ricollegare la sessione, indipendentemente da quanti -Do -Rho aggiunto al comando. Tuttavia, screen -lsfornisce convenientemente il pid della sessione, consentendo di intervenire utilizzando quanto segue:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(Questo è simile alla risposta di Brian Thomas, ma la sua ucciderà tutte le sessioni di schermo in esecuzione, che potrebbe non essere quello che vuoi se hai più schermi aperti ma solo un comportamento scorretto.)


Dopo 6 ore che mi hanno spezzato la testa su Internet ... la tua è stata l'unica risposta che ha funzionato. Grazie compagno!
kRazzy R,

1

Come te, volevo uccidere la mia sessione dello schermo e ho trovato inutile la documentazione. Convinto che ci deve essere una scorciatoia da tastiera, ho scoperto che
ctrl + apoi \
funziona

Poi ricevo il messaggio: "Esci davvero e uccidi tutte le finestre [y \ n]"

Non sono sicuro del perché la documentazione indichi ctrl + aallora ctrl + \. Questo non fa nulla per me.


1

È possibile trovare l'ID processo della schermata corrente allegata. Ho trovato lo stesso ID di sessione che puoi ottenere con il comando:
screen -ls
E puoi usare il comando seguente per terminare quel processo:
kill [sessionId]oppure
sudo kill [sessionId]
Puoi uccidere lo schermo anche se è collegato su un'altra finestra del terminale.


0

Premi ctrl + d per eliminare la finestra dello schermo. Ripeti fino a quando non uccidi tutte le finestre dello schermo. Una volta esaurito tutto lo schermo di Windows ucciderà la sessione e terminerà. La soluzione più breve se non si hanno molte finestre

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.