Оптимальный способ отслеживания сеанса 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 
  • Как сигнализировать конец ввода «read -N»?
  • Запустить приложение, используя xinit на разных tty
  • cat повреждает данные последовательного порта
  • Почему терминал отправляет CR, даже если установлен ICRNL?
  • изменить тайм-аут tty login - ArchLinux
  • Почему `last` show '{' и '|' в поле TTY?
  • Как запустить демон talkd?
  • Обои для рабочего стола TTY / Console
  • Прочитайте, что написано в / dev / tty *
  • Могу ли я подключиться к физическому терминалу любого компьютера без монитора
  • Невозможно войти в систему, используя серийный номер ttyO0 - BeagleBone Black
  • Почему выдача одной и той же команды создает больше выходных данных в tty, чем в pts / gnome-terminal?
  • Interesting Posts

    Пробелы как разрывы строк из команды inline for loop

    Прошивка для беспроводной карты на Ubuntu / Debian?

    Захват групп с помощью awk или grep

    cd ~ работает в одном сеансе терминала, но не в другом (об ошибке не сообщается)

    OSX: генерировать контрольную сумму MD5 рекурсивно в текстовом файле, содержащем файлы с соответствующей контрольной суммой

    Locale сохраняет сброс на английский язык для учетной записи пользователя, отличного от sudo

    Заблокирован от Amazon EC2 SSH – эта услуга позволяет только подключать sftp

    Установите обратный вызов, когда возникает определенный процесс

    OpenBSD – doas.conf (операция не разрешена)

    Как поставить программу «да» на задний план?

    Slurp-режим в awk?

    некоторые общие библиотеки в / usr / local / lib не найдены, но они находятся в / usr / lib

    автоматически создавать суб-интерфейсы VLAN, если они являются частью моста в файле / etc / network / interfaces

    Общий препроцессор добавляет дополнительные пробелы

    Можно ли перенести текст OCRed из одного PDF в другой PDF-файл?

    Linux и Unix - лучшая ОС в мире.