在UNIX中,我正在通过执行以下命令来检查进程是否已启动;如何检查Unix进程是否在Perl中运行?
E.g.
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语句为true。我知道这是错误的。 我试图逃避正则表达式中的“$”字符,看看是否是这个问题,我也尝试从正则表达式中删除Perl变量。
我在这里错过了什么?我知道我的正则表达式是错误的地方:(
感谢
我们不知道你的'psg'别名或shell函数是什么。我们看到你的''$ checkProc = ...'行中有反引号,这可能是一个语法错误。我们看到你将'psg'管入'grep'中,如果'psg'已经是包含grep的别名,这对我没有任何意义。重要的是,我们不知道'$ checkProc'和'$ myNode'的内容 - 如果'$ myNode'为空,那么你的正则表达式将会匹配任何一个空格字符,这可以解释你的症状。 – pilcrow 2010-10-02 14:00:36