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.