Слежение за запуском второй копии процесса и его завершение

Обсуждение программ nnCron и nnCron LITE

Слежение за запуском второй копии процесса и его завершение

Postby D.Ilyin » Thu, 03 Feb 2005, 20:19

День добрый,
Возможно я плохо искал на форуме но к сожалению не нашел практической реализации задачи:
Контроль за запуском второй копии процесса и его принудительное завершение
Да и теоритическое выполнение этой задачи не пришло в голову :(
Направьте в нужную сторону.... Можно пинком :)
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby Valery_Kondakoff » Thu, 03 Feb 2005, 23:41

ну, вроде, проблема не стоит выеденного яйца:

Code: Select all
VARIABLE proc-count
WatchProc: xxx.exe
Action:
proc-count 0 !
\ считаем - сколько процессов в памяти
FOR-PROCS: "xxx.exe"
    proc-count @ 1 + proc-count !
;FOR-PROCS
proc-count 1 >
\ если больше одного - прибиваем последний запущенный
IF
    KILL: "%WATCH-PROC-ID%"
THEN
CU
VK
User avatar
Valery_Kondakoff
Site Admin
 
Posts: 769
Joined: Thu, 01 Jul 2004, 20:49
Location: Moscow, Russia

Postby D.Ilyin » Fri, 04 Feb 2005, 11:05

Хм.... при выполнении этой задачи nnCron выдает ошибку :(
Code: Select all
TC_start: Внутренняя ошибка. Error # -1073741819

Появилась такая идея.
При запуске первого экзмпляра записывать его PID в текстовый файл.
При запуске последующего проверять существует ли файл и какой там PID. А затем убивать процесс с PID который отличный от записанного первым.
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby VK » Fri, 04 Feb 2005, 12:03

ну да, потому что я забыл один важный символ в строке
Code: Select all
proc-count @ 1 >

:)
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby D.Ilyin » Mon, 07 Feb 2005, 17:50

ну да, потому что я забыл один важный символ в строке

:) тогда появляется ошибка
Code: Select all
16:46:19 140 TC_start: Внутренняя ошибка. Error # -1073741819

при запуске первого процесса :(.
Видно придеться все таки заниматься записью и чтением из файла....
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby VK » Mon, 07 Feb 2005, 18:26

пардон, вот работающий вариант (я еще в одном месте аргументы местами по-ошибке поменял):

Code: Select all
#( test_kproc
VARIABLE proc-count
WatchProc: xxx.exe
Action:
0 proc-count !
\ считаем - сколько процессов в памяти
FOR-PROCS: "xxx.exe"
    proc-count @ 1 + proc-count !
;FOR-PROCS
proc-count @ 1 >
\ если больше одного - прибиваем последний запущенный
IF
    KILL: "%WATCH-PROC-ID%"
THEN
)#
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby D.Ilyin » Mon, 07 Feb 2005, 18:38

VK (far_away) :) спасибо большое!!!
Действительно сейчас все работает :).

PS для программы которая у меня работает и которую надо убивать при запуске второго экземпляра процесса этот скрипт 100% рабочий.
Но тут пришла в голову другая идея :)
А что если программа запускает второй процесс, но инкапсулирует его в первый?
Можно ли как нибудь завершить второе окно програмы, немого изменив эту задачу nnCrona?
Как пример такого процесса ACDSee7.exe

PSS Все что написано в PS чисто спортивный интерес :).
Last edited by D.Ilyin on Mon, 07 Feb 2005, 18:49, edited 1 time in total.
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby VK » Mon, 07 Feb 2005, 18:49

что-то я не пойму чего ты хочешь...
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby D.Ilyin » Mon, 07 Feb 2005, 19:17

VK (far_away) wrote:что-то я не пойму чего ты хочешь...

Ну например, если запустить ACDSee 7.0 то она откроет одно окно.
При запуске ее второй раз она откроет второе окно но в списке процессов будет виден только один.
Вот и вытекает отсюда вопрос. Можно ли завершить второе запушенное окно процесса
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby Tez » Mon, 07 Feb 2005, 20:40

Можно ли завершить второе запушенное окно процесса

Как по процессу не знаю. Знаю как по маске:
(внешняя задача, проверял – работает)
Code: Select all
VARIABLE list
CREATE mask C" *ACDSee 7.0" ",

: main
\ сохраняем список окон по маске
     mask COUNT FOR-WINDOWS
        WIN-HWND list AppendNode
    ;FOR-WINDOWS

MSG: ready \ отсюда начинается вторая часть (задача)

\ прибиваем все новые окна по маске
     mask COUNT FOR-WINDOWS
        WIN-HWND list InList? NOT
      IF
       WIN-HWND N>S WIN-CLOSE
      THEN
    ;FOR-WINDOWS

list FreeList
;
Только один вопрос нерешенный: по какому событию запускать первую задачу?
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 3 guests

cron