Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как удалить процесс? / 22 сообщений из 22, страница 1 из 1
27.07.2010, 10:45
    #36761077
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Как удалить процесс? Номер джоба известен...
Смотрел в документации класс SYS.Process , там есть метод Terminate() ... Но параметров он не имеет. Думается что удаляет он "сам себя".

А как удалить нужный мне? Причем работать это должно в 5.0 и 2007... Ну на худой конец 2009.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
27.07.2010, 11:08
    #36761137
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
...
Рейтинг: 0 / 0
27.07.2010, 11:11
    #36761143
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Terminate убивает открытый процесс
Код: plaintext
1.
2.
 s p=$system.Process.%OpenId(pid) 
 w p.Terminate()
...
Рейтинг: 0 / 0
27.07.2010, 11:18
    #36761154
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Спасибо...
...
Рейтинг: 0 / 0
27.07.2010, 11:35
    #36761216
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
servit Kill a cache process
Там требуют логины и пароли...
...
Рейтинг: 0 / 0
27.07.2010, 11:49
    #36761261
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
krvsaservit Kill a cache process
Там требуют логины и пароли...

вот оттуда код, но SYS.Process нету в 5.0
так что ##CLASS(SYS.Process) можно поменять на $system.Process, и нет необходимости переключаться в %SYS
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
set OK =  0 
zn "%SYS"
set Job=##CLASS(SYS.Process).%OpenId(PID)
if (Job '= "")
{
     set canBeKilled = Job.CanBeTerminated
     if (canBeKilled)
     {
         set cpt =  0 
         while ((OK =  0 ) && (cpt < 100 )) // 100  or  10 , must try
         {
             set st = Job.ReleaseAllLocks()
             set status = Job.Terminate()
             if (status =  1 ) //if ($$$ISOK(status))
                 {set OK =  1 }
             else
             {
                 HANG  1 
                 set cpt = cpt +  1 
             }
         }
     }
}
k Job 
...
Рейтинг: 0 / 0
27.07.2010, 11:50
    #36761267
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
да и в этом коде есть очистка блокировок процесса перед тем как убивается процесс
...
Рейтинг: 0 / 0
27.07.2010, 11:56
    #36761289
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
DAiMorтак что ##CLASS(SYS.Process) можно поменять на $system.Process, и нет необходимости переключаться в %SYS
Написал

Код: plaintext
1.
 d $system.Process.Open(pid).Terminate()

вместо

Код: plaintext
1.
2.
3.
4.
 s ns=$zu( 5 )
 zn "%SYS"
 d ##class(SYS.Process).Open(pid).Terminate()
 zn ns

Ошибка...

Код: plaintext
1.
 d $system.Process.Open(pid).Terminate()                                        ^                                                                              
<SYNTAX>TERMINATE+ 7 ^ADMPAROL     
...
Рейтинг: 0 / 0
27.07.2010, 11:56
    #36761292
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
DAiMorно SYS.Process нету в 5.0
Вот это плохо...
...
Рейтинг: 0 / 0
27.07.2010, 11:58
    #36761297
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
DAiMorда и в этом коде есть очистка блокировок процесса перед тем как убивается процесс
Х/з стоит это делать или нет... Ведь убийство процесса должно и так чистить таблицу блокировок.
Пока тесты показывают что так и есть.
...
Рейтинг: 0 / 0
27.07.2010, 12:13
    #36761346
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
не стоит путать Open с OpenId
...
Рейтинг: 0 / 0
27.07.2010, 12:19
    #36761363
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
krvsa,

%SYSTEM.Process
У класса %Persistent есть методы %Open и %OpenId и нет метода Open .

Для версии 5.0 замените
Код: plaintext
set Job=##CLASS(SYS.Process).%OpenId(PID)
на
Код: plaintext
set Job=##CLASS(%SYSTEM.Process).%OpenId(PID)

krvsaТам требуют логины и пароли...
Странно, чтение сообщений доступно всем. Попробуйте очистить кэш в браузере.
...
Рейтинг: 0 / 0
27.07.2010, 12:41
    #36761427
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Смотрел документацию...

авторclass SYS.Process extends %SYS.ProcessQuery

Перешел в материнский класс

авторpersistent class %SYS.ProcessQuery extends %Persistent, %SYSTEM.Help

увидел пример


Код: plaintext
1.
2.
3.
4.
For example, the following open a process with a PID of  2078 :

s Process=##CLASS(%SYS.ProcessQuery).%OpenId("2078")
s Process=##CLASS(%SYS.ProcessQuery).Open("P2078")
s Process=##CLASS(%SYS.ProcessQuery).Open("2078")

Сделал тестовый пример

Код: plaintext
1.
2.
3.
 s ns= s ns=$zu( 5 )
 zn "%SYS"
 d ##class(SYS.Process).Open(pid).Terminate()
 zn ns

Он успешно работает.
...
Рейтинг: 0 / 0
27.07.2010, 12:43
    #36761435
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Код: plaintext
d $system.Process.%OpenId(pid).Terminate()
Не работает...

Код: plaintext
1.
2.
 d $system.Process.%OpenId(pid).Terminate()                                      
^                                                                              
<SYNTAX>TERMINATE+ 7 ^ADMPAROL 
...
Рейтинг: 0 / 0
27.07.2010, 12:44
    #36761441
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Код: plaintext
d $system.Process.%Open(pid).Terminate()
Та же ошибка...
...
Рейтинг: 0 / 0
27.07.2010, 13:07
    #36761511
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
krvsa
Код: plaintext
d $system.Process.%OpenId(pid).Terminate()
Не работает...

Код: plaintext
1.
2.
 d $system.Process.%OpenId(pid).Terminate()                                      
^                                                                              
<SYNTAX>TERMINATE+ 7 ^ADMPAROL 


данная команда будет работать только на 5.0
и она должна возвращать результат
сделай так
w $system.Process.%OpenId(pid).Terminate()
...
Рейтинг: 0 / 0
27.07.2010, 13:08
    #36761513
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Ищите в док-ии $ZUTIL(4).
Присутствует в документации на все версии Cache вплоть до 2009.1.
Из 2010.1 (как мы все, наверное, знаем) описания $zu'шек исключили, однако работать они от этого не перестали :)
ИнтерСистемз, несомненно, права, надо переходить на классы, т.к. это приводит к более сопровождаемому и понятному коду, но ИМХО, тогда лучше завести собственный набор системных классов, упрятав в него вызовы ИнтерСистемз'ских: уж больно часто они их меняют...
Что касается $zutil(4), то она нормально работает с 4.1 по 2010.1...
...
Рейтинг: 0 / 0
27.07.2010, 13:19
    #36761551
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Больше склоняюсь таки к ограничению по версии... От 2007 и выше. Т.ч. 5.0 поддерживать не стоит.
...
Рейтинг: 0 / 0
27.07.2010, 13:22
    #36761559
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
На 5.0 это

Код: plaintext
w $system.Version.GetMajor()

работает? Возвращает цифру 5?
...
Рейтинг: 0 / 0
27.07.2010, 13:43
    #36761635
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Возвращает цифру 5?
Да.
...
Рейтинг: 0 / 0
27.07.2010, 13:48
    #36761652
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
Вот и отлично...
...
Рейтинг: 0 / 0
27.07.2010, 16:36
    #36762186
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить процесс?
krvsaВот и отлично...
Я предпочитаю макросы. Использую самописный INC-файл CacheVersion.INC:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include %occBuild
 
#define CacheVersion	$$$PRODUCTVERSIONSTR
 
#define IsCache(%ver)	($$$CacheVersion'<%ver)
 
#define IsCache50	$$$IsCache( 5 . 0 )
#define IsCache51	$$$IsCache( 5 . 1 )
#define IsCache52	$$$IsCache( 5 . 2 )
#define IsCache20071	$$$IsCache( 2007 . 1 )
#define IsCache20081	$$$IsCache( 2008 . 1 )
#define IsCache20082	$$$IsCache( 2008 . 2 )
#define IsCache20091	$$$IsCache( 2009 . 1 )
#define IsCache20101	$$$IsCache( 2010 . 1 )
Ну а дальше подключаю его везде, где код зависит от версии Cache:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include CacheVersion.INC
...
#if $$$IsCache51
	//код для Cache  5 . 1 +
	#if $$$IsCache20091
		//код для Cache  2009 . 1 +
	#else
		//код для Cache  5 . 1  -  2008 . 2 
	#endif
#else
	//код для Cache  5 . 0 -
#endif
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как удалить процесс? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]