![]() |
![]() |
![]() |
|
получить PID процесса 1С | ☑ | ||
---|---|---|---|---|
0
MiracMC
06.05.11
✎
11:42
|
День добрый, коллеги.
Так и не нашел места, куда бы приткнуть свой вопрос, что бы он был в тему. В общемто сабж. По сути есть сервер, на котором кроме людей работают еще и боты "1С"... и бывает момент, что кто то из них "умирает". В дереве процессов есть несколько одноименных процессов 1Сv7.exe. А вот как опредилить, какой именно из них уже висит - непонятно. Естественно, что если бы меня интерисовл вопрос "рученоого воскрешения умершого" - я бы и не парился особо. но задача сделать это програмно. Вопрос: можно ли как то получить PID процесса 1C из пол ние самой, что б передать уго кудато дальше (не суть куда)? Заранее благодарен. |
|||
1
MiracMC
06.05.11
✎
11:44
|
ам... немного не туда разместил...
v7 собственно! |
|||
2
skunk
06.05.11
✎
11:45
|
постараться победит причину умирания ботов и устранить
|
|||
3
Irbis
06.05.11
✎
11:50
|
Боты должны самоубилься делать после окончания работы, а не висеть по тыще лет.
|
|||
4
dk
06.05.11
✎
11:52
|
узнать-то можно, тока как ты заставишь "зависшие" процессы сообщать тебе их pid?
|
|||
5
Сверчок
06.05.11
✎
11:55
|
не-е-е, вопрос-то, на самом деле, весьма стоящий.
разумеется, это тема далеко не "7.7", а вовсе даже "IT". но вопрос правильный. а именно -- вопрос получения статуса определённого процесса. |
|||
6
Кириллка
06.05.11
✎
11:57
|
можно конечно. На мисте даже код пробегал от старого еврея, в котором используется получение PID'а
|
|||
7
dk
06.05.11
✎
11:58
|
угу, абрахамс красивое решение выкладывал через запуск процесса и возврат parentprocessid
|
|||
8
dk
06.05.11
✎
11:59
|
но таки это не решит проблему зависших
|
|||
9
andrewks
06.05.11
✎
12:02
|
(6) старого? не боишься, что обидится?
|
|||
10
Кириллка
06.05.11
✎
12:03
|
копирайты его, а может MS :)
//________________________________________________________________________________ // Функция ПолучитьPID() Перем oLocator, oService, oShell, oApp, oChildProcess; Перем чPID; чPID = -1; Попытка oLocator = СоздатьОбъект("WbemScripting.SWbemLocator"); oService = oLocator.ConnectServer(".", "root\CIMV2"); // Запускаем дочерний rundll32.exe // oShell = СоздатьОбъект("WScript.Shell"); oApp = oShell.Exec("rundll32.exe kernel32,Sleep"); // Получаем rundll32 по PID'у // oChildProcess = oService.Get("Win32_Process.Handle=" + oApp.ProcessID); // Получаем PID родительского процесса - 1с // чPID = oChildProcess.ParentProcessID; // Завершаем rundll32, чтобы не мусорить // oChildProcess.Terminate(); Исключение // нуу, может не быть прав на эти вещи, например. КонецПопытки; Возврат чPID; КонецФункции // ПолучитьPID() //________________________________________________________________________________ // Процедура Сформировать() Сообщить("PID: " + ПолучитьPID()); КонецПроцедуры // Сформировать() |
|||
11
Кириллка
06.05.11
✎
12:07
|
(8)если бы (0) спрашивал, как решить проблему зависающих процессов, то да. А так, человек задал конкретный вопрос, в ожидании получить конкретный ответ.
|
|||
12
NS
06.05.11
✎
13:59
|
(11) Почему не решит? Решит.
Пишешь батник, который рубит процессы работающие больше определенного времени. Его в шедулер. При запуске бота писать в файл PID и время запуска. |
|||
13
Skom
06.05.11
✎
14:28
|
(0) на script-coding.info много интересного найдешь
|
|||
14
Skom
06.05.11
✎
14:28
|
||||
15
andrewks
06.05.11
✎
14:30
|
(14) давно как перееехал
|
|||
16
Kreont
06.05.11
✎
14:31
|
(0)боты "1С" запускай через шедулер с установкой максимального времени выполнения, тогда ОСь сама аго отрубит, неважно завис он или еще не доделал работу.
|
|||
17
Skom
06.05.11
✎
14:31
|
(16) он сам разберется как ему ботов запускать
может они постоянно висеть должны. |
|||
18
Torquader
06.05.11
✎
22:35
|
(16) А потом ТИИ базы ты за них делать будешь ?
Процесс 1С должен завершаться корректно, если это возможно. P.S. процесс 1С очень редко виснет, а вот ошибка в обработке приводит к тому, что обработка завершается, а 1С просто висит и ждёт, когда кто-то нажмёт клавишу (и если она запустилась в отдельном DeskTop-е, то ждёт вечно). Но, можно использовать ОбработкаОжидания или DDE_Request, чтобы привести процесс "в чувство" и продолжить работу - а вы "догнать и убить" сразу. |
|||
19
MiracMC
07.05.11
✎
00:44
|
(10) - спасибо огромное... буду тестировать.
(12) - почти угодали суть. поясню... бота можно запустить и остановить.. не есть проблема... но вот незадача... боты у меня на "просторах" VMware живут.. у "Вари" есть проблема - переодичкая потеря коннекта к базе по сети... сам не знаю, или виртуальный адаптер дает сбой, или еще что то. ну и естественно процессы продолжают висеть в стадии "CodeBase Error"... тут уже все равно, закрою я их гуманно, или нет... всеравно прибегнуть к ТИИ прийдется... но это уже другой вопрос. по сути есть у меня 10-ок ботов... все на одной машине... но падают как то странно.. не все... и не из за ошибок в базе. и перезапускать надо естетственно не всех... написа програмку, которая висит в трее и рубит/перезапусепнт процессы.. но надо PID того самого процесса... если описаное выше вернет правльный PID, то я его при запуске закину в файлик для каждого бота.. а потом просто туда же буду дописывать время работы... ну и прого рубит/перезапускать, если время больше, чем надо... протестирую завтра и отпишусь.. спасибо... |
|||
20
MiracMC
07.05.11
✎
00:46
|
более подробно по сути ВАРИ изложил 1с 7.7. + VMware Workstation 7.1.3
|
|||
21
MiracMC
07.05.11
✎
14:08
|
(10) - СПАСИБО ЕЩЕ РАЗ ОГРОМНОЕ!!!
РАБОТАЕТ!!!! |
|||
22
Кириллка
08.05.11
✎
18:44
|
(21)ну ты это не мне спасибо, а абрахамсу - он постил этот код.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |