powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как удалить процесс?
22 сообщений из 22, страница 1 из 1
Как удалить процесс?
    #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
Как удалить процесс?
    #36761137
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761143
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Terminate убивает открытый процесс
Код: plaintext
1.
2.
 s p=$system.Process.%OpenId(pid) 
 w p.Terminate()
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761154
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо...
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761216
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit Kill a cache process
Там требуют логины и пароли...
...
Рейтинг: 0 / 0
Как удалить процесс?
    #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
Как удалить процесс?
    #36761267
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и в этом коде есть очистка блокировок процесса перед тем как убивается процесс
...
Рейтинг: 0 / 0
Как удалить процесс?
    #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
Как удалить процесс?
    #36761292
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorно SYS.Process нету в 5.0
Вот это плохо...
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761297
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorда и в этом коде есть очистка блокировок процесса перед тем как убивается процесс
Х/з стоит это делать или нет... Ведь убийство процесса должно и так чистить таблицу блокировок.
Пока тесты показывают что так и есть.
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761346
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не стоит путать Open с OpenId
...
Рейтинг: 0 / 0
Как удалить процесс?
    #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
Как удалить процесс?
    #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
Как удалить процесс?
    #36761435
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
d $system.Process.%OpenId(pid).Terminate()
Не работает...

Код: plaintext
1.
2.
 d $system.Process.%OpenId(pid).Terminate()                                      
^                                                                              
<SYNTAX>TERMINATE+ 7 ^ADMPAROL 
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761441
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
d $system.Process.%Open(pid).Terminate()
Та же ошибка...
...
Рейтинг: 0 / 0
Как удалить процесс?
    #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
Как удалить процесс?
    #36761513
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищите в док-ии $ZUTIL(4).
Присутствует в документации на все версии Cache вплоть до 2009.1.
Из 2010.1 (как мы все, наверное, знаем) описания $zu'шек исключили, однако работать они от этого не перестали :)
ИнтерСистемз, несомненно, права, надо переходить на классы, т.к. это приводит к более сопровождаемому и понятному коду, но ИМХО, тогда лучше завести собственный набор системных классов, упрятав в него вызовы ИнтерСистемз'ских: уж больно часто они их меняют...
Что касается $zutil(4), то она нормально работает с 4.1 по 2010.1...
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761551
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Больше склоняюсь таки к ограничению по версии... От 2007 и выше. Т.ч. 5.0 поддерживать не стоит.
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761559
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На 5.0 это

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

работает? Возвращает цифру 5?
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761635
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращает цифру 5?
Да.
...
Рейтинг: 0 / 0
Как удалить процесс?
    #36761652
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и отлично...
...
Рейтинг: 0 / 0
Как удалить процесс?
    #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
22 сообщений из 22, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как удалить процесс?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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