次のコード スニペットは、ptree を使用して、返された結果から3 番目の 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
これをコーディングするより良い方法があるかどうか知りたいです。これは、実行に最も時間がかかるスクリプトの部分です。
注: このコードは、他のスニペットと共にループ内にあり、数回実行されます。