![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
AGENTxXx |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Добрый день, уважаемые форумчане!
Проблема следующая: У меня скрипт запускается через cmd в определенное время, но иногда он зависает и висит, а новый запуститься не может, т.к. заблокирован прежним. Можно ли как-то получить данные о тексте в cmd, если cmd запускается из стороннего приложения (т.е. процесс создается из внешней программы)? Хочу сделать проверку, что если, например, 10 минут одни и те же данные в окне, то убить процесс. Спасибо! |
|||
|
||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: 1 Всего: 1 |
Лучше запускайте ваш скрипт через Proc::Background, выставив таймаут выпонения. Зависший скрипт будет убит автоматически.
|
|||
|
||||
AGENTxXx |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Не получится... тут или нужно писать свой crontab если только. У меня сейчас сторонняя программа запускает скрипт по времени. По нагрузке процессора отловить тоже нельзя, т.к. иногда зависший скрипт может всё равно жрать память.
Немного альтернативные решения: 1) Изменить скрипт в котором сделать, чтобы каждую итерацию создавался и убивался файл. И вычислить определенный промежуток времени, через который итерация точно закончиться должна. И если разница со временем проверки и даты создания файла больше, чем время итерации - тогда убивать; 2) Делать скрин cmd окна и сравнивать его с предыдущим. если они совпадают - значит скрипт завис и убиваем его. Тут проблема в том, что если несколько cmd окон открыто (а на серваке постоянно это происходит), то не понятно, как выловить нужное, т.к. заголовки у этих окон в основном одни и те же. WinSpy++ не видит ни какую информацию о том, что за скрипт запущен. В общем, пока думаю... |
|||
|
||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
это почему? если допустимо весь вывод себе забрать, то http://stackoverflow.com/questions/4291912...-get-the-output |
|||
|
||||
AGENTxXx |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
Да, я уже писал подобные программы, которые работают с cmd через Process. Проблема в том, что работает всё так:
Есть программа crontab под Windows (написанная не мной), и она запускает сейчас скрипты в зависимости от указанного времени. Чтобы сделать всё, через Process, необходимо написать самому программу crontab. Я сомневаюсь, что если мы даже crontab запустим через мою программу, то он сможет отловить процесс, который запускает сам crontab. Сейчас к сожалению времени нет, чтобы самому свой crontab писать.... Пишется думаю за день, но пока и дня нет... Возможно, когда уж сильно припечёт - придётся писать, а пока "в ручную" слежу за скриптом. |
|||
|
||||
AGENTxXx |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
В общем, на удивление мне, тщательный поиск по этому вопросу ни чего не дал....
Видно нужно опускаться до низкого уровня и вылавливать адреса памяти у окна. Ну или есть чуть проще вариант - эмулировать клик по окну и через правую кнопку мыши выделять всё и потом сравнивать. В общем, решил остановиться на следующем решении: через bat-файл добавляю к команде title my_script - за счёт этого меняю заголовок окна и могу найти нужное окно. Потом размещаю его поверх всех окон и делаю скрин. Потом сравниваю. Если картинки совпадают - убиваю процесс. Полностью пока не написал, как напишу - выложу код. Может кому пригодиться тоже... |
|||
|
||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: 1 Всего: 1 |
Так получается, что вы можете редактировать задачи этого "кронтаба", да? Тогда, вместо бат файлов, напишите программу-прокси, которая будет запускать нужные скрипты и следить за их состоянием, хоть по таймауту, хоть по выводу. Наверно это проще будет чем по-вашему.
|
|||
|
||||
AGENTxXx |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 8.6.2009 Репутация: нет Всего: 1 |
infarch, В данном случае проще свой crontab написать. И на самом деле, нужно было его писать с самого начала, т.к. всё равно со своей "мега прогой" на грабли нарвался. С которой только на локальной машине можно работать....
В общем, продолжение истории.... Написал я эту "мега прогу", которая делает скрины и сравнивает, еще может даже сохранять зависшие скрины, перезапускать скрипт. Даже отправку вроде на мыло почти написал, но в gmail какая-то защита дополнительная стоит, а я на этой почте тестил. И он почему-то заблочил обращение через мою прогу (можете в инете почитать, очень распространена ошибка 5.5.1 Authentication Required). А вот теперь долбаный подводный камень... Т.к. у меня сервак удалённый, то подключаюсь я через RDP, и пока у меня соединение открыто, то всё работает хорошо, но как только закрываю - сразу же валится, а всё потому, что, например скрин экрана мы не можем уже получать, т.к. функционал этот отключается... Не знаю как по умному это выразить, но видно он лишние библиотеки выгружает, когда log off происходит. Скорее всего с этим поможет справиться Radmin, но он тоже глючит не понятно каким образом... МОЁ РЕШЕНИЕ (работает сейчас): У меня скрипт пока выполняется записывает данные в файл. Решил сделать проверку этого файла, и если он не изменяется в течении определенного времени - убиваю его. Проект прикрепил. Если вдруг кому понадобится. Хотел картинку прикрепить, но видно сервис тут отвалился Присоединённый файл ( Кол-во скачиваний: 0 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |