2

Команда OpenVMS DCL показывает, что у меня три активных сеанса.

$ show users
  OpenVMS User Processes at 12-OCT-2014 20:44:29.57
Total number of users = 3,  number of processes = 6

Username  Node     Interactive  Subprocess   Batch
CWHII     ROSIE            3
EFRICHA   ROSIE            1
HEINER    ROSIE            2

Как мне определить два старых и затем прекратить их?

2 ответа2

1

Определите все процессы, которые вы запускаете.

$ SHOW USER CWHII/FULL
      OpenVMS User Processes at 13-OCT-2014 16:13:46.49
    Total number of users = 1,  number of processes = 3

 Username  Node   Process Name    PID     Terminal
 CWHII     ROSIE  CWHII         20200117  TZA44:   (108.225.238.117)
 CWHII     ROSIE  _TZA18:       202000B4  TZA18:   (108.225.238.117)
 CWHII     ROSIE  _TZA33:       202000C9  TZA33:   (108.225.238.117)

Определите текущее имя процесса, запросив прерывание DCL и отчет о состоянии, выполнив Control-T.

$ ^T
ROSIE::CWHII 16:13:49   (DCL)   CPU=00:02:48.66 PF=15943 IO=9693 MEM=245

Убейте двоих, у которых нет этого имени процесса.

$ STOP/IDENTIFICATION=202000B4
$ STOP/IDENTIFICATION=202000C9

Более низкие PID на этих двух подтверждают, что они являются более старыми процессами.

Это информация для интерактивного метода для справки без использования сценария, основанного на информации в ответе Хейна .

1

Хммм, я обычно использую ^ T (control-T), чтобы увидеть «кто я» и $ SHOW US CWHII/FULL. Затем стреляйте, чтобы убить при необходимости.

Если мы предположим, что «старый» означает НЕ текущую сессию, то вы пишете следующее:

$ type CLEAN_ME_UP.COM
$ ctx  = ""
$ this = F$GETJPI( "", "PRCNAM" )
$ user = F$GETJPI( "", "USERNAME" )
$ node = F$GETJPI( "", "NODENAME" )
$ temp = F$CONTEXT( "PROCESS", ctx, "USERNAME", user, "EQL" )
$ temp = F$CONTEXT ("PROCESS", ctx, "NODENAME", node, "EQL")
$! IF F$TYPE( ctx ) .NES. "PROCESS_CONTEXT" THEN EXIT
$loop:
$ pid  = F$PID( ctx )
$ IF pid .EQS. "" THEN EXIT
$ that = F$GETJPI( pid, "PRCNAM" )
$ IF this.EQS.that
$ THEN
$  WRITE SYS$OUTPUT pid, " new"
$ ELSE
$  WRITE SYS$OUTPUT pid, " old"
$ ENDIF
$ GOTO loop
  • Конечно, вы захотите заменить WRITE SYS $ OUTPUT на STOP/ID, как только будете выполнены.
  • Удалите контекст NODE, если вы хотите сделать это для всех более старых процессов на каждом узле.
  • Подумайте о F $ GETJPI("", "LOGINTIM"), если вы действительно хотите использовать "старше" (стрелять в ногу?)

Ура, Хейн

переформатирован:

$ ctx  = ""
$ this = F$GETJPI( "", "PRCNAM" )
$ temp = F$CONTEXT( "PROCESS", ctx, "USERNAME", F$GETJPI("","USERNAME"), "EQL" )
$ temp = F$CONTEXT ("PROCESS", ctx, "NODENAME", F$GETJPI("","NODENAME"), "EQL")
$! IF F$TYPE( ctx ) .NES. "PROCESS_CONTEXT" THEN EXIT
$loop:
$ pid  = F$PID( ctx )
$ IF pid .EQS. "" THEN EXIT
$ IF F$GETJPI( pid, "PRCNAM" ).NES.F$GETJPI("", "PRCNAM") THEN WRITE SYS$OUTPUT "STOP ",pid
$ GOTO loop

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .