Оптимальный способ отслеживания сеанса TTY, который блокирует ресурс?

Предположим, что у вас много интерактивных оболочек, которые запускаются под одним и тем же идентификатором пользователя, например множество screen или tmux (или обоих) «вкладки». Вы попытались unmount устройство и поняли, что не могли, поскольку на одном из этих сеансов оболочки его текущий каталог изменился. Вы можете легко найти TTY-имя и список процессов, связанных с (просто еще один bash или zsh ), но если вы не хотите просто kill его, пока не убедитесь, что это безопасно, как вы собираетесь найти соответствующий screen / tmux "вкладка"?

One Solution collect form web for “Оптимальный способ отслеживания сеанса TTY, который блокирует ресурс?”

Не уверен, что это оптимальный способ, но вот «путь».

Во-первых, определите, какой сеанс «экран» или «tmux» откроет устройство:

 lsof -R $mountpoint 

Несколько вещей, которые вам нужны из этого вывода, это PID процесса и его PPID (предположим, вы назначили их $PID и $PPID соответственно).

Затем проверьте, какие дочерние процессы запущены под этим PID, это должно помочь вам в случае, если вы вышли на другой компьютер из этой оболочки или у вас на данный момент есть редактор или что-то еще. Если что-то запущено, вам будет достаточно легко найти нужную вкладку на основе дочерних команд.

 pstree -p $PID 

Предполагая, что вышеприведенная команда не производит выход, теперь вы должны проверить, что является родительским элементом этой оболочки.

 ps -f $PPID 

Если это не что иное, как SCREEN или tmux вы должны иметь возможность легко понять это.

В случае, если это SCREEN и у вас есть несколько, вы должны уметь определить, какой из них можно посмотреть на дочерние процессы SCREEN вы нуждаетесь.

 pstree -p $PPID 

Если есть еще несколько, вы можете открыть новую вкладку в каждом SCREEN и продолжать перезапускать pstree -p $PPID пока не узнаете, какой из них он есть. После этого вы должны проверить каждую вкладку и как-то выяснить правильную. В оболочке вы можете проверить PID оболочки, если она соответствует $PID проблемного, или одного из его дочерних pstree -p $PID созданного pstree -p $PID выше.

Если это tmux , это не так просто, как все оболочки находятся под одним tmux. Однако то, что вы можете сделать с помощью tmux , автоматически отправляет keypressess во все открытые панели. Они могут сделать что-то неожиданное, если у вас есть редактор, работающий там, но вы, вероятно, знаете лучше, если это нормально делать или нет.

 for i in $(tmux list-panes -a | awk -F': ' '{print $1}'); do tmux send-keys -t $i "[[ \$\$ == $PID ]] && logout" Enter done 
  • Терминалы «Unbusy», которые будут выведены из системы, когда TMOUT достигнут
  • Как изменить разрешение после загрузки установочного носителя Arch Linux?
  • Вернитесь в X-сеанс после Ctrl + Alt + F1
  • Инструмент для просмотра других tty для linux?
  • Разница между tty и ttyS и оч и vcsa?
  • Как запустить демон talkd?
  • bash -i поведение и «почему мой терминал висел?»
  • Захват текстового снимка псевдотерминала
  • Использовать / захватить единственную клавиатуру без локального входа в систему
  • Как виртуальные консоли связаны с традиционными компьютерными терминалами?
  • Как открыть tty или выполнить какой-либо скрипт, когда ярлык Ctrl + Alt + F не работает, а X11 частично заморожен, но система все еще работает?
  • Linux и Unix - лучшая ОС в мире.