前几天在客户现场处理一个问题的时候,我注意到并偶然提到有两套应用进程在运行,一套是以某个通用的名字运行,比如Production.SysAdmin,另一套是以一个人的名字,叫他Fred.SysAdmin,已经运行了3年多。原来,Fred前段时间已经离开了公司。我并不是说Fred有什么恶意,但我想到一个经常被提及的"最佳实践",就是当Fred离开公司时,立即终止他的登录凭证,也许就在你告诉他要离开公司之前。但我从来没有听说过任何关于终止Fred所启动的任何进程的最佳实践。考虑到VOS系统重启之间的时间长度,我相信这种情况并不是唯一的。我建议,除了在某人离开公司时终止他们的登录凭证外,任何以该人的名义运行的进程或执行该人创建的程序模块的进程都要进行评估,然后安排终止,如果认为有必要的话,由现任员工重新启动。同样,批处理队列也应该被审查,任何以该人名义的请求都应该被评估、取消,如果认为有必要,则由现有员工重新提交。
要检查批处理队列,你可以使用以下命令
list_batch_requests -all -long
并寻找弗雷德的名字作为"用户"
Request: 59 User: Fred.SysAdmin Time queued: 10-08-11 05:00:02 edt Deferred until: 10-08-12 05:00:00 edt Attributes: waiting, not privileged, cannot restart Process priority: 5 Queue priority: 4 Process name: test Command: test.cm Output path: %system#m16_mas>SysAdmin>Fred>test.out Home dir: %system#m16_mas>SysAdmin>Fred Notify users: Fred.* on %system#* |
您可以使用以下命令
analyze_system -request_line (字符串匹配 fred (byte 3Bx) who) -quit
来识别以Fred的名义运行的进程。
analyze_system -request_line (string match fred (byte 3Bx) who) -quit OpenVOS Release 17.0.2ah, analyze_system Release 17.0.2ah Current process is 182, ptep 958C5000, Noah_Davids.CAC * 162 958C5000 551080B6 Fred.SysAdmin (testing) |
下面的命令宏可以用来查找Fred创建的任何正在执行的程序模块,无论进程以什么名字运行。这个宏创建了一个所有正在执行的程序模块的列表,然后执行display_file_status来确定谁创建了程序模块文件,执行display_program_module来确定谁绑定了程序模块。任何由某人创建或绑定的程序模块,只要名字与输入字符串相匹配,就会和执行该程序模块的进程一起显示。它还会在当前目录下创建一个名为wr_&NAME&.(date).out的报告,其中&NAME&是给宏的参数。 所有的名字都被翻译成小写。如果没有给定名称,它就会显示每个正在执行的程序模块的信息,报告的名称为wr.(date).out。
whos_running fred %phx_vos#m15_mas>SysAdmin>George>loop.pm。绑定的。Fred. SysAdmin 创建。George.SysAdmin 循环.下午。 对象在模块上被George.SysAdmin(循环)读取锁定。 %phx_vos#m16 executing loop.pm.============================================================%phx_vos#m15_mas>Production>test>ftpd.pm 受制于:Stcp_Install.Installer 创建。Fred.SysAdmin ftpd.pm: 对象在模块上被Production.SysAdmin(测试)读取锁定。 %phx_vos#m16执行ftpd.pm。 准备好了 09: 05: 22
|
& whos_running begins_here |