+7 499 990-10-21

Повторный запуск ДК

Повторный запуск ДК

Сообщение af5gor » 09 янв 2015, 01:13

Сегодня мой "любимый" особо_необучаемый продавец умудрилась запустить несколько копий ДК. Соответственно при закрытии смены поймала дежавю, разрешив вопрос просто закрыв смены везде.

:shock: КАК?!? Я ХОЧУ УВИДЕТЬ КАК ОНИ ЭТО ДЕЛАЮТ...

:?: Как можно запретить повторный запуск ДК?

Я предполагаю что нужно модифицировать пункт меню IceWM.
Проверить список процессов и если ДК уже загружена, то распахнуть окно ДК.
Если через список процессов, то какой именно процесс нужно проверять?

Идеальным было бы если это реализовать в самой ДК.
af5gor
 
Постов: 54
Зарегистрирован: 24 сен 2014, 22:44

Re: Повторный запуск ДК

Сообщение Spike » 11 янв 2015, 23:03

Запуск происходит через run_reshka. Интерфейс кассира dnc_rmk.


Вот неплохая статья про процессы.
http://www.k-max.name/linux/processy-v-linux/
Изображение
Spike
 
Постов: 401
Зарегистрирован: 26 авг 2009, 15:33
Откуда: Курская обл. г.Льгов

Re: Повторный запуск ДК

Сообщение Alexander » 12 янв 2015, 14:15

Дело в том, что запуск нескольких процессов (от имени разных пользователей с отдельными настройками оборудования в домашних каталогах пользователей и возможностью использования разных БД) используется при организации работы кассовых мест через тонкие клиенты или в режиме multiseat (несколько рабочих мест на одном ПК).

Если необходимо реализовать запрет через скрипт запуска /usr/bin/dnc_kassa_start, то можно мониторить процесс dnc_kassa.
Alexander
 
Постов: 4992
Зарегистрирован: 16 авг 2009, 23:34
Откуда: Техподдержка ГК ДЭНСИ

Re: Повторный запуск ДК

Сообщение af5gor » 21 янв 2015, 11:07

Модифицировал /usr/bin/dnc_kassa_start добавив в начало следующий скрипт:
Код: Выделить всё
dnc_proc=dnc_kassa
ps -A | grep -s -q -w $dnc_proc
if [ $? -eq 0 ] ; then
    zenity --info --text "Касса уже запущена" --timeout=1 &
   dnc_pid=$(ps -A | grep -w $dnc_proc | cut -d ' ' -f 2)   
   if [ -z $dnc_pid ] ; then exit ;fi       
   echo dnc_pid=$dnc_pid
   dnc_child_pid=$(pgrep -P $dnc_pid | sed -n '$p')
   echo dnc_child_pid=$dnc_child_pid
   if [ -z $dnc_child_pid ] ; then
      dnc_child_pid=$dnc_pid
   fi    
   for dnc_xpid in $( wmctrl -lp | grep -w $dnc_child_pid | cut -d ' ' -f 1 ) ; do   
      echo dnc_xpid=$dnc_xpid            
      if [ -n $dnc_xpid ] ; then 
         wmctrl -a $dnc_xpid -i
      fi
   done
    exit
fi

Доставлял sudo apt-get install wmctrl

P.s. Конструктивная критика приветствуется
af5gor
 
Постов: 54
Зарегистрирован: 24 сен 2014, 22:44


Вернуться в Техподдержка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


cron

Кто сейчас на конференции

Сейчас посетителей на конференции: 14, из них зарегистрированных: 0, скрытых: 0 и гостей: 14 (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (180) здесь было 29 апр 2024, 13:15

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14