Я должен признать, что являюсь активным пользователем Firefox, поэтому, когда я прекращаю FF, мне всегда приходится проверять с помощью системного монитора, действительно ли его процесс завершается, прежде чем завершать работу Ubuntu. В противном случае я получу «экран восстановления сеанса» на следующем сеансе из-за принудительного завершения Ubuntu FF во время выключения.
Итак, у меня появилась идея отслеживать FF, и когда процесс завершается, чтобы отправить команду в NotifyOSD, чтобы, ну, в общем, уведомить меня, что FF выключен и безопасно завершить работу Ubuntu.
Поскольку я довольно новичок в Ubuntu, я понятия не имею, как это сделать, или даже если это возможно ... Любой совет, с чего начать?
С наилучшими пожеланиями и заранее спасибо! Ruessel
PS: я запускаю Ubuntu 14.04 LTS
Возможно сделать так. Можно было записать сценарий обертки, который будет запускать процесс и получать его PID и контролировать для того PID. Например, я записал маленький рев сценария, который, если названо как monitor_process.sh firefox
будет запускать Firefox и ожидать, пока он не выйдет.
#!/bin/bash
nohup $@ &> /dev/null &
PID=$!
while ps --no-headers -p $PID > /dev/null
do
echo $PID
: # no-op
sleep 0.25
done
notify-send "$@ exited"
, Конечно, может быть несколько экземпляров Firefox, таким образом, мы хотим иметь что-то как monitor_process.sh firefox
, и он будет контролировать все окна Firefox, непока они все не выйдут.
#!/bin/bash
SELF=$
while pgrep -f firefox | grep -v $SELF > /dev/null
do
: # no-op
sleep 0.25
done
notify-send "$@ exited"
способ, которым я сделал это выше, путем получения PIDs всех процессов, которые содержат строку "Firefox" в них, но игнорирование PID сценария (потому что monitor_process.sh firefox
будет включен в список, и мы не хотим это - выход привычки сценария, если это постоянно контролирует себя).
, Конечно, сценарий выйдет, после того как он отсылает уведомление и, возможно, должен перезапустить при повторном открытии окна после того, как он выходит, таким образом, вероятно, было бы легче также добавить nohup $@ &> /dev/null &
к второй строке в сценарии и использовать его и в качестве средства запуска и в качестве монитора.
, С другой стороны, мы могли добавить внешний цикл с условием продолжения, который будет контролировать, если Firefox будет работать, и начните контролировать только если его выполнение; если не - начинают контролировать.
#!/bin/bash
start_monitoring()
{
while pgrep -f "$@" | grep -v $SELF &> /dev/null
do
: # no-op
sleep 0.25
done
notify-send "$@ exited"
}
main()
{
local SELF=$
while true
do
pgrep -f "$@" | grep -v $SELF > /dev/null
[ $? -eq 0 ] && start_monitoring "$@"
sleep 0.25
done
}
main "$@"
И код выше будет работать на несколько экземпляров Firefox и несколько завершений и повторных открытий, таким образом, можно закрыть Firefox во время сессии, это уведомит Вас и продолжит ожидать, пока новый не обнаруживается и начнет контролировать это.
Это работает на меня...
Создайте названную папку bin
в Вашем корневом каталоге, если такая папка уже не существует.
Создайте файл простого текста в ~/bin
со следующим содержанием:
#!/bin/bash
if
pgrep firefox
then
notify-send --urgency=critical "Is Firefox still running?"
else
notify-send "No Firefox process is running"
zenity --question --text="Proceed to shutdown?"
if [ $? = 0 ]; then
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
else
exit
fi
fi
Сохраните его как fx-check-n-shutdown
. Никакая потребность в любом суффиксе.
Затем щелкните правой кнопкой по fx-check-n-shutdown
из Вашего файлового менеджера. Выбрать Properties
и сделайте файл "исполняемым файлом" для Вас.
Установка libnotify-bin
от центра программного обеспечения или путем выполнения sudo apt-get install libnotify-bin
в терминале.
После того как это сделано, ввести fx-check-n-shutdown
в Вашем терминале и хите enter
. Необходимо ли видеть, что уведомление просит, чтобы Вы "Firefox все еще работали?" или что "Никакой процесс Firefox не работает".
В последнем случае, куда никакой процесс Firefox не работает, уведомление скоро исчезнет отдельно (если Ваш указатель мыши не по области, занятой уведомлением).
Вы будете также видеть, что маленькое окно спрашивает Вас, если Вы хотите завершить работу или нет.
Если Firefox будет все еще работать, то необходимо будет отклонить уведомление сами путем нажатия на уведомление, и можно затем удостовериться закрытие Firefox полностью.
То, что Вы сделали, должно создать названный сценарий fx-check-n-shutdown
.
Вы сделали это исполняемым файлом.
Вы установили libnotify-bin
программа, которая позволяет обычным пользователям делать свои собственные уведомления.
Что делает сценарий:
Это проверяет, работает ли какой-либо процесс с "Firefox" в нем.
Если процесс Firefox работает, Вы уведомляетесь. Можно затем открыть терминал и работать pgrep firefox
получить идентификатор процесса (PID) и использовать тот PID для получения большего количества деталей фактической команды, работающей путем выполнения cat /proc/<pid>cmdline
где Вы будете использовать фактический PID вместо <pid>
.
Если никакой процесс, включающий Firefox, не открыт, Вы кратко уведомляетесь, и окно завершения работы Zenity открывает выяснение у Вас, хотите ли Вы действительно завершить работу или нет.
После того как Вы удовлетворены, можно настроить сочетание клавиш для запуска fx-check-n-shutdown
вместо того, чтобы иметь необходимость выполнить его через терминал. То, как Вы настраиваете ярлык, зависит от Вашего специфического аромата Ubuntu. Для Ubuntu 14.04 инструкции здесь: https://help.ubuntu.com/14.04/ubuntu-help/keyboard-shortcuts-set.html
matplotlib
, и я не хочу переполнять код. Добавление текстового отрывка было бы намного более изящным. Так или иначе Ваш комментарий был очень полезен. I' m думающий теперь, будет ли matplotlib
в состоянии декодировать символ, который я делаю (если я сделал один). Что действительно думает?
– Alexandru Mircea
24 August 2017 в 03:23
false
действительно. Кроме того, проверьте сообщения о состоянии в консоль ST, они могли бы быть полезными для нахождения причины. – idleberg 19 August 2017 в 03:16