加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl中快速找到用户的终端PID?

发布时间:2020-12-15 23:28:45 所属栏目:大数据 来源:网络整理
导读:下面的代码片段用于通过使用ptree并从它返回的结果中获取第三个PID来查找用户终端的PID.所有终端PID都存储在哈希中,用户的登录名作为密钥. ## If process is a TEMINAL. ## The command ptree is used to get the terminal's process ID. ## The user can th
下面的代码片段用于通过使用ptree并从它返回的结果中获取第三个PID来查找用户终端的PID.所有终端PID都存储在哈希中,用户的登录名作为密钥.

## If process is a TEMINAL.
   ## The command ptree is used to get the terminal's process ID.
   ## The user can then use this ID to peek the user's terminal.
   if ($PID =~ /(w+)s+(d+) .+basic/) {
    $user = $1;
    if (open(PTREE,"ptree $2 |")) {
     while ($PTREE = <PTREE>) {
      if ($PTREE =~ /(d+)s+-pksh-ksh/) {
       $terminals{$user} = $terminals{$user} . " $1";
       last;
      }
      next;
     }
     close(PTREE);
    }
    next;
   }

下面是一个ptree执行示例:

ares./home_atenas/lmcgra> ptree 29064
485   /usr/lib/inet/inetd start
  23054 /usr/sbin/in.telnetd
    23131 -pksh-ksh
      26107 -ksh
        29058 -ksh
          29064 /usr/ob/bin/basic s=61440 pgm=/usr/local/etc/logon -q -nr trans
            412   sybsrvr

我想知道是否有更好的方法来编写代码.这是脚本运行时间最长的部分.

注意:此代码与其他代码段一起位于循环内并执行几次.

解决方法

我认为主要的问题是这个代码是循环的.您不需要运行ptree并多次解析结果!您需要找到一种方法来运行ptree一次并将其放入一个稍后可以使用的数据结构中.可能是某种简单的哈希就足够了.您甚至可以只保留%终端哈希并继续重用它.

一些挑剔……

>你的两个“下一个”陈述似乎都是
我没必要……你应该这样
能够删除它们.
>替换

$terminals{$user} = $terminals{$user} . " $1";

有:

$terminals{$user} .= " $1";

>替换你的裸字PTREE用作文件句柄$ptreeF或其他一些……使用裸露变得不必要了filehandles大约10年前:)>我不知道为什么你的$PID变量是全部大写……这可能令人困惑对你的代码的读者,因为它看起来有什么东西特别关于那个变量,和没有.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读