screen
複数またはtmux
(または両方)「タブ」など、同じユーザーIDで実行される複数の対話型シェルがあるとします。デバイスを「ing」しようとしましたunmount
が、シェルセッションの1つの現在のディレクトリが変更されたため、そうすることができないことがわかりました。 TTY名と(他のbash
または)にzsh
関連付けられているプロセスのリストを簡単に見つけることができますが、kill
安全であると確信するまでこれをしたくないと仮定すると、そのscreen
/ tmux
「タブをどのように見つけることができますか?」?
答え1
これが最善の方法であるかどうかはわかりませんが、「単一の」方法です。
まず、デバイスがどの「screen」または「tmux」セッションを開いたかを確認します。
lsof -R $mountpoint
この出力で必要な情報は、プロセスのPIDとそのPPIDです($PID
およびそれぞれに割り当てられていると仮定$PPID
)。
次に、このPIDでどのサブプロセスが実行されているかを確認します。これは、このシェルから別のコンピュータに入るのを防ぐのに役立つ場合、またはssh
現在エディタまたは他のプログラムを実行している場合に役立ちます。何かが実行されている場合は、サブコマンドに基づいて目的のタブを簡単に見つけることができます。
pstree -p $PID
上記のコマンドが出力を生成しないと仮定すると、このシェルの親が何であるかを確認する必要があります。
ps -f $PPID
そうでなければ、SCREEN
かなりtmux
簡単に見つけることができます。
その場合は、SCREEN
プロセスが複数あり、SCREEN
必要なサブプロセスを調べて、どのプロセスであるかを確認できる必要があります。
pstree -p $PPID
それでも複数のタブがある場合は、各タブで新しいタブを開き、どのタブがあるかを調べるまでSCREEN
再度実行します。pstree -p $PPID
その後、各タブを確認し、何とか正しいタブを見つける必要があります。シェルでは、シェルのPIDが$PID
問題のあるシェルまたはその子孫(pstree -p $PID
上記で作成された)のいずれかのPIDと一致することを確認できます。
その場合、tmux
すべてのシェルが1つのtmuxの下にあるため、簡単ではありません。ただし、できることは、tmux
開いているすべてのウィンドウにキーストローク情報を自動的に送信することです。そこでエディタを実行すると予期しない結果が出る可能性がありますが、そうすることができればおそらく最もよくわかります。
for i in $(tmux list-panes -a | awk -F': ' '{print $1}'); do
tmux send-keys -t $i "[[ \$\$ == $PID ]] && logout" Enter
done