Come terminare la sessione di tmux ed elaborarla


13

Ho notato che ho un processo in esecuzione e penso che sia perché ho inizializzato il processo in byobu che sta usando tmux.

ps aux | grep sidekiq
1000     13786  0.0  0.0   8108   900 pts/4    S+   11:27   0:00 grep sidekiq

Ho una sessione di tmux chiamata "3". Come puoi vedere di seguito:

$ byobu   

Byobu sessions...

  1. tmux: 3: 1 windows (created Wed Aug 28 10:57:54 2013) [229x84] (attached)
  2. tmux: daemon: 1 windows (created Thu Jul 11 12:59:09 2013) [127x83]
  3. tmux: juggernaut: 1 windows (created Thu Jul 11 12:54:08 2013) [80x23]

Vorrei uscire da quella sessione e terminare tutti i processi in esecuzione creati da quella sessione.


Riesci a incollare l'output di 'ps -ef | grep byobu 'e' ps -ef | grep tmux '?
Dustin Kirkland,

Risposte:


15
tmux kill-session [-t session_name]

i processi nei terminali virtuali dovrebbero ricevere SIGHUP.


5
ma SIGHUP non uccide i processi. di solito li respanws .
Andrea Pavoni,

1
Dipende dai processi di cui stai parlando. Alcuni demoni infatti usano SIGHUP come segnale per reinizializzare (rileggere i file di configurazione ecc.), Ma questi di solito si allontanano dal gruppo di processo e dal terminale di controllo e devono essere considerati indipendenti da quel momento in poi. Le applicazioni interattive di solito si chiudono a causa della mancata gestione del segnale o perché la perdita del tipo di terminale va contro l'essere interattivo.
peterph

6

Anche questo mi dava fastidio, quindi ho scritto un plugin tmux per questo. Non è perfetto, ma può essere facilmente esteso per sapere come eliminare in modo sicuro la maggior parte dei processi prima di uscire da tmux: tmux-safekill


4

Forse non è la soluzione più elegante, ma fa quello che hai chiesto:

tmux list-panes -s -F "#{pane_pid} #{pane_current_command}" | grep -v tmux | awk '{print $1}' | xargs kill -9

Se lo esegui dalla tua sessione di tmux, ucciderà tutti i processi generati e potrai quindi uscire da tmux exit.


0

(dichiarazione di non responsabilità: sono un principiante) Questo script termina tutti i riquadri / finestre some_sessioned esce:

#!/usr/bin/env bash

session="some_name"

echo about to kill ${session}, ok?
read -n 1 -s -r -p "Press key..."
echo 

sessiontest=`tmux ls | grep ${session}`

if [ "${sessiontest}" == "" ]; 
then
        echo no running session ${session}
else        
        for name in `tmux list-windows -F '#{window_name}' -t ${session}` ; do 

        tmux select-window -n

        for pane in `tmux list-panes -F '#{pane_id}' -t ${session}` ; do 
        tmux send-keys -t $pane C-c
        # send SIGINT to all panes in selected window
        echo ${session}:$name.${pane//%}
        done

        for pane in `tmux list-panes -F '#{pane_pid}' -t ${session}` ; do 
        kill -TERM ${pane}
        # terminate pane
        done

        done 
fi

echo list-sessions:
tmux list-sessions
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.