uccidi uno schermo (ma non tutti gli schermi)


19

Ho più schermi in esecuzione su un server Ubuntu che vengono avviati come:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

E devo uccidere uno schermo, ma non tutti. Qual è il comando corretto per uccidere una singola schermata particolare con il suo nome? Ho letto le pagine man ma non riesco a trovare il comando che sto cercando.

Inoltre voglio scrivere questo comando in uno script bash, quindi non posso semplicemente screen -r screen1premere Ctrl+ Xcome farei normalmente.


Mi dispiace, pensavo che si trattasse di Donkey Kong per un secondo
— Chopper3,


Questa è una bella maglietta, la maggior parte delle persone non la capirà, a meno che non abbiano visto "Il re di Kong": imdb.com/title/tt0923752
— BassKozz,

La parola corretta per un oggetto di una frase è "te".
— In pausa fino a nuovo avviso.

3
Hai detto "prendilo" qui e "Grazie" di seguito. Dovrebbe essere "prendilo [per] te" e "Grazie [sia per] te".
— In pausa fino a nuovo avviso.

Risposte:


19

Dalla pagina man:

   -X   Send the specified command to a running screen  session.  You  can
        use  the  -d or -r option to tell screen to look only for attached
        or detached screen sessions. Note that this command  doesn't  work
        if the session is password protected.

Tu puoi fare :

        screen -X -S <sessionid> kill

PERFETTO!!! Grazie a Defraagh, Musta l'ha perso nell'uomo.
— BassKozz,

Buono a sapersi :-)
— ℝaphink,

9

Se lo fai screen -list, noterai che ogni nome di schermata inizia con un numero, che è il PID dello schermo:

 $ screen -list
There are screens on:
        12281.pts-1.jonah       (12/21/2009 07:53:19 PM)        (Attached)
        10455.pts-1.jonah       (12/19/2009 10:55:25 AM)        (Detached)
2 Sockets in /var/run/screen/S-raphink.

Da lì, basta inviare un segnale KILL a questo PID specifico:

$ kill 12281

e ucciderà la schermata specifica.


questo non funzionerà perché lo sto eseguendo da uno script bash, e piuttosto non devo estrarre il PID dalla lista dello schermo che corrisponde allo schermo corretto ... la risposta di defraagh sopra ha funzionato come un fascino. Grazie
— BassKozz,

Ok, bene che Defraagh aveva una soluzione perfetta per questo.
— ℝaphink,

1

La soluzione di defraagh non funziona per me, tuttavia posso uccidere la sessione dello schermo usando l'idea di Raphink:

screen -list ottiene l'ID processo

uccidere -9 PROCESSID

screen-wipe SESSIONID


1

Se hai più schermate con lo stesso nome, puoi ucciderle contemporaneamente:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • Il comando screen -lsstampa le schermate con il loro numero di processo. Ad esempio, 4773.test è una schermata con il numero di processo 4773 e il test del nome . Uscita campione:

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • egrepFiltri di comando sopra il testo di esempio inviato tramite una linea di condotte | .

  • Il comando awk -F "." '{print $1}'estrae la prima colonna di ogni riga. Delimitatore tra le colonne è definito come punto (.) Da opzione -F
  • Finalmente il comando xargs killucciderà tutto il processo i cui numeri inviati tramite pipe |. xargsviene utilizzato quando si desidera eseguire un comando su ciascuno degli input.

0

Si apre una nuova finestra con

Ctrl A + C

Chiudi una finestra con

Ctrl + D

o esci dal comando all'interno della finestra


0

Ho avuto a che fare con questo come segue:

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

La spiegazione è che prendi l'output di screen -lse trovi la schermata particolare che ti interessa usando grep e poi assegna quella stringa alla variabile process.

Poiché l'output da screen -lsè sempre il PID seguito da un punto è quindi possibile utilizzare il taglio per eliminare il periodo e tutto ciò che lo segue. nell'esempio sopra lo inseriamo tra parentesi e lo inseriamo nel comando kill anche se potresti farlo in modo lineare che potrebbe includere la scrittura in un file temporaneo e la lettura di quello.

Devi assicurarti che il tuo nome schermo sia univoco e che grep stia restituendo SOLO il nome dello schermo che vuoi uccidere.

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.