Não tenho certeza se esse é o caminho ideal, mas aqui está "de uma maneira".
Primeiro, identifique qual sessão "screen" ou "tmux" tem o dispositivo aberto:
lsof -R $mountpoint
As poucas coisas que você precisa dessa saída são o PID do processo e seu PPID (suponha que você os atribua a $PID
e $PPID
respectivamente).
Em seguida, verifique quais processos filhos estão sendo executados sob este PID, isso deve ajudá-lo caso você ssh
em outra máquina deste shell, ou você tenha um editor ou alguma outra coisa em execução no momento. Se algo está sendo executado, deve ser fácil encontrar a guia que você precisa com base nos comandos filhos.
pstree -p $PID
Supondo que o comando acima não produza saída, você deve agora verificar qual é o pai desse shell.
ps -f $PPID
Se isso for tudo, menos SCREEN
ou tmux
, você poderá descobrir facilmente.
No caso de ser SCREEN
e você tiver vários, será possível descobrir qual deles, examinando os processos filhos do SCREEN
necessário.
pstree -p $PPID
Se ainda houver vários, você poderá abrir uma nova guia em cada SCREEN
e continuar executando novamente o pstree -p $PPID
até descobrir qual deles é. Depois disso, você tem que verificar cada guia e de alguma forma descobrir o correto. No shell, você pode verificar o PID do shell se ele corresponder ao $PID
do problemático ou a um de seus filhos, conforme produzido por pstree -p $PID
acima.
Se for tmux
, não é tão fácil como todas as shells estão sob um único tmux. No entanto, algo que você pode fazer com tmux
é enviar automaticamente pressionamentos de tecla para todos os painéis abertos. Isso pode fazer algo inesperado se você tiver um editor sendo executado lá, mas provavelmente você sabe que é melhor fazer isso ou não.
for i in $(tmux list-panes -a | awk -F': ' '{print $1}'); do
tmux send-keys -t $i "[[ \$\$ == $PID ]] && logout" Enter
done