Что нового

Проверерка на состояния заморозки процесса.

La2Angel

Новичок
Сообщения
156
Репутация
1
На форуме нашел функцию заморозки и разморозки процесса. Возник следующий вопрос:
1. Есть скрипт (Первый), при помощи него, мы запускаем другой скрипт (Второй), который морозит процесс.
2. Т.к. у нас уже процесс заморожен, второй раз морозить ненадо, т.к. разморозится, как Первому узнать при сканировании данного процесса, что он уже замороженный и не запускать еще раз скрипт Второй?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
в архиве файл - пример Proc_mon.au3
код и останавливает и запускает процессы. ведет список остановленных процессов. если остановить процесс и перезапустить скрипт, то в его окне отобразиться остановленный процесс.
за основу взял пример с форума. остальное дописал сам.
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Там все элементарно - какой процесс заморозил, он записывает в ini файл. А мне нужно узнать непосредственно от самого процесса, т.е. нашел процесс в списке и проверил его на наличие заморожен или нет.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так это тоже вариант. в принципе ты получаешь то, что нужно. не нужно задействовать лишний раз службы системы.
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Тогда смотрим далее, у нас 2 процесса с одинаковым названием, получается он в ини просто обновит пид и все, а второй процесс будет гулять дальше.


Добавлено:
Сообщение автоматически объединено:

Не знаю, но в голову пока приходит лишь один вариант, сделать сторонний файл и хранить данные типа <proc>explorer.exe</proc><proc>1475</proc> и парсить его между <proc>.

Хотя.... это долго и маловероятно.


Добавлено:
Сообщение автоматически объединено:

Можно конечно в массив двумерный загонять, но.... каков шанс того, что виндовс не присвоит PID уже который был другому процессу ?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
нет, просто дописываешь к именам их PID
то есть в коде меняешь схожие строчки вот на эти
Код:
IniDelete($ini_log, 'suspend', $proc_name & '_' & $proc_id)


Код:
IniWrite($ini_log, 'suspend', $proc_name & '_' & $proc_id, $proc_id)

тогда в одинаковых именах будут присутствовать не повторяющиеся PID-ы процессов
 
Автор
L

La2Angel

Новичок
Сообщения
156
Репутация
1
Да я уже пошел путем массива. Типа такого:
Код:
#include <Array.au3>
Dim $a[1][1]
$Process = ProcessList()
For $i = 1 to $Process[0][0]
	ReDim $a[$i+1][2]
	$a[$i][0] = $Process[$i][0]
	$a[$i][1] = $Process[$i][1]
Next
_ArrayDisplay($a)



Добавлено:
Сообщение автоматически объединено:

Тема не решена.... воспользовался функцией удаления пустых строк из массива и от 80 процессов, процесс улетает в 30% при чистке, есть варианты как можно еще ?

Желательно посредствами виндовс проверять на заморозку процесса.
Как вы предложили с ini - перезаписывать файл каждые 1-3 секунды по 20-80 раз... это жестко, лучше с памятью играть.
 
Верх