Как определить дополнительные сеансы терминала OpenVMS и затем прекратить их?
Команда 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 ответа
Хммм, я обычно использую ^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
Определите все процессы, которые вы запускаете.
$ 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 на этих двух подтверждают, что они являются более старыми процессами.
Это информация для интерактивного метода для справки без использования сценария, основанного на информации в ответе Hein.