В ситуации с одним пользователем, если взять пример xterm, мы можем просто подсчитать количество pids из xterm; xterm создает отдельный pid для каждого окна. gnome-terminal однако запускает один pid, но хорошей новостью является то, что он создает дочерний процесс для каждого окна и / или вкладки. мы можем восстановить эти дочерние процессы с помощью команды:
pgrep -P <pid_of_gnome-terminal>
Однако есть несколько осложнений:
Считая ваш вопрос, мы можем предположить, что пользователь в этом случае фактически является владельцем x-сессии. Обычно мы можем просто использовать $USER -variable, но это может не соответствовать зарегистрированному в данный момент пользователю $DISPLAY. В многопользовательской ситуации pids, принадлежащие терминальному приложению (или который), необязательно относятся к текущему $DISPLAY. Нам нужно отделить только соответствующие pids и child-pids. В Unity (15.10 или ниже), если второй пользователь входит в систему, запускается дополнительный процесс (gnome-pty-helper), который появляется как дочерний процесс в gnome-terminal, но процесс (очевидно) не имеет окна или вкладки. В Mate процесс все равно существует.Чтобы подсчитать количество вкладок и / или окон терминального приложения, нам необходимо:
Читая ваш вопрос, мы может предположить, что пользователь в этом случае фактически является владельцем x-сессии. Обычно мы можем просто использовать $USER -variable, но это может не соответствовать зарегистрированному пользователю $DISPLAY. Из запущенных процессов отделяются только соответствующие pids, работающие на этом $DISPLAY В многопользовательской ситуации pids, принадлежащие терминальному приложению (или который), необязательно относятся к текущему $DISPLAY. Нам нужно отделить только соответствующие pids и child-pids.Это может быть очень хорошо написано, чтобы надежно найти количество открываемых в настоящее время окон и / или вкладок.
В приведенном ниже сценарии целевое приложение терминала используется в качестве аргумента. Скрипт работает на многих терминалах, на которых я тестировал его. Исключением является Tilda в этот момент.
Пример
Из запущенных процессов отделяются только соответствующие pids, работающие на этом $DISPLAY [!d18 ]
Команда:
/path/to/get_terms.sh gnome-terminal
выходы:
3
, а
/path/to/get_terms.sh xterm
[d36 ]: 2
#!/bin/bash
terminal=$1
# get the user running the current x-session
username=$(who | grep $DISPLAY | head -1 | awk '{print $1}')
# get the pid of the terminal for the current user
userpid=$(pgrep -u $username $terminal)
# check what type the terminal is (multi pid/single pid)
npids="$(echo "$userpid" | wc -w)"
# in case of a single pid, count the children
if [ "$npids" -eq 1 ]; then
# check if gnome-pty-helper runs (starts when multiple users are logged in)
ptpid=$(pgrep gnome-pty-helpe)
# get number of child- procs
let "orig = $( pgrep -P $(pgrep -u $username $terminal) | wc -w )"
# if pty-helper runs, correct the number of child procs
if [ -n "$ptpid" ] && [ -n "$userpid" ]; then
let "n_terms = $orig-1"; else let "n_terms = $orig"
fi
# if no child procs run, n-terminals = n-counted pids (difference Mate <> Unity)
if [ "$n_terms" -eq 0 ]; then echo $orig; else echo $n_terms; fi
# in case of multiple pids, count the pids
elif [ "$npids" -gt 1 ]; then echo $npids
fi
Считая ваш вопрос, мы можем предположить, что пользователь в этом случае фактически является владельцем x-сессии. Обычно мы можем просто использовать $USER -переменная, но это может не соответствовать зарегистрированному пользователю $DISPLAY.
/path/to/get_terms.sh <terminal_application>
ядро 4.4.0-122 снова работает отлично, пока это не было. Я продолжал использовать 4.4.0-116. Что касается вас, то 119 и 121 не загрузились для меня.
Итак, никакой помощи отсюда. К счастью, это не было опасной для жизни ситуацией, и я смог загрузить машину, используя 4.4.0.116. Но реальным решением было обновление всей ОС до 18.04 LTS. Но было бы неплохо узнать, что вызвало этот неожиданный провал.
Но случай закрыт - ответ заключается в том, чтобы перейти к следующей версии LTS.
ядро 4.4.0-122 снова работает отлично, пока это не было. Я продолжал использовать 4.4.0-116. Что касается вас, то 119 и 121 не загрузились для меня.
Итак, никакой помощи отсюда. К счастью, это не было опасной для жизни ситуацией, и я смог загрузить машину, используя 4.4.0.116. Но реальным решением было обновление всей ОС до 18.04 LTS. Но было бы неплохо узнать, что вызвало этот неожиданный провал.
Но случай закрыт - ответ заключается в том, чтобы перейти к следующей версии LTS.