gpt4 book ai didi

perl - 如何检查 Unix 进程是否在 Perl 中运行?

转载 作者:行者123 更新时间:2023-12-03 18:12:13 24 4
gpt4 key购买 nike

在 UNIX 中,我通过执行以下命令检查进程是否已启动;

例如。

psg dtllst pe99

如果进程正在运行,这将返回以下输出;
UID    PID    PPID    C    STIME    TTY    TIME CMD
pe99 1234 1 0 03:29:44 pts/8 0:01 dtllst pe99

现在在 Perl 中,我希望能够查明此进程是否已启动。到目前为止,我正在执行以下操作
`my $checkProc = `psg dttlst | grep $myNode 2>&1`;`    #where $myNode is something like pe01 or pe02 or pe65 or pe99 etc...

现在,在此之后,我执行以下操作以查看上面的 Perl 命令是否返回了我正在寻找的内容,以查看进程是否已启动;
if ($checkProc =~ m/dtllst $myNode | $myNode/) {
#yes, process is up
} else {
#no, process is down
}

但是,这不起作用 - 特别是,无论 UNIX 进程是否处于事件状态,我的代码始终将 if 语句评估为真。我知道这是错误的。
我试图在正则表达式中转义“$”字符以查看这是否是问题所在,并且我还尝试从正则表达式中完全删除 Perl 变量。

我在这里缺少什么?我知道我的正则表达式在某处是错误的:(

谢谢

最佳答案

您可以使用 Proc::ProcessTable以避免必须启动外部命令并解析其输出。就像是

use Proc::ProcessTable;
...
my $t = Proc::ProcessTable->new;
my $is_running = grep { $_->{cmndline} =~ /^dtllst $myNode/ } @{$t->table};

关于perl - 如何检查 Unix 进程是否在 Perl 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com