答案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
- 当然,一旦满意,您就想用 STOP/ID 替换 WRITE SYS$OUTPUT。
- 如果您想对每个节点上的所有旧进程执行此操作,请删除 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
答案2
识别您正在运行的所有进程。
$ 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)
通过执行 Control-T 请求 DCL 中断和状态报告来识别当前的进程名称。
$ ^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 确认它们是较旧的进程。
这是基于以下信息的交互式方法的参考信息,无需使用脚本海因的回答。