Как я могу убить сценарий монитора dbus при выходе приложения?

Это выглядит как задание для cut

cut -d: -f2- file > new_file
1
задан 23 May 2017 в 15:39

1 ответ

Рассмотрим функцию в фоновом режиме, которая будет опроса pgrep для pid gnote, и как только PID остановит dbus-monitor (обратите внимание на использование флага -f с pkill). Также обратите внимание на то, как вызывается функция фона - stop_monitor &

Я изменил ваш скрипт, включив такую ​​функцию. Установленный gnote, протестированный на Ubuntu 16.04, работает как ожидалось.

#!/bin/bash 

stop_monitor()
{
    while pgrep "gnote" > /dev/null
    do
       :
    done

    pkill -f "dbus-monitor"
}

OJECT="'org.gnome.Gnote'" 
IFACE="'org.gnome.Gnote.RemoteControl'" 
DPATH="'/org/gnome/Gnote/RemoteControl'" 
echo $IFACE


WATCH1="type='signal',sender=${OJECT},interface=${IFACE},path=${DPATH},member='NoteAdded'" 
WATCH2="type='signal',sender=${OJECT},interface=${IFACE},path=${DPATH},member='NoteSaved'" 
WATCH3="type='signal', sender=${OJECT}, interface=${IFACE}, path=${DPATH}, member='NoteDeleted'"

stop_monitor &

dbus-monitor ${WATCH2} | 
while read LINE; 
do
    echo $LINE | grep "note://"
done
1
ответ дан 23 May 2018 в 06:24
  • 1
    Благодарю. Это работает. Но бесконечный цикл заставляет процесс проходить более 35 МБ с течением времени ... не знаю, почему. Я использую while sleep 10, который также работает без cpu / memory hog. – Khurshid Alam 8 September 2016 в 09:10
  • 2
    @KhurshidAlam на 35 МБ вы имеете в виду 35 МБ ОЗУ? или вы перенаправляете вывод в файл? Кроме того, с помощью цикла while в функции stop_monitor рассмотрим добавление sleep 0.25. – Sergiy Kolodyazhnyy 8 September 2016 в 09:27
  • 3
    Кроме того, если этот ответ работает на вас, подумайте о том, чтобы отметить его как принятый или по крайней мере оставить надпись, чтобы выразить, что этот ответ полезен. Опять же, до вашего рассмотрения – Sergiy Kolodyazhnyy 8 September 2016 в 09:28
  • 4
    Перенаправление? .... Да ... только перенаправление стандартного вывода и ошибки в системный журнал. exec 1> >(logger -s -t $(basename $0) 2>&1) и exec 2> >(logger -s -t $(basename $0)) Но это не так важно. Я могу удалить это. – Khurshid Alam 8 September 2016 в 12:41
  • 5
    Мне нравится описанный выше метод с использованием обертки. Поэтому я принял это как ответ. Но это тоже работает. Благодарю. – Khurshid Alam 8 September 2016 в 12:45

Другие вопросы по тегам:

Похожие вопросы: