来自 cmdline 的 pgrep 参数返回 2 个 PID,来自全局变量值的参数返回 1 个 PID

来自 cmdline 的 pgrep 参数返回 2 个 PID,来自全局变量值的参数返回 1 个 PID

1.第一种情况(processName 作为来自 cmd 即 java 的参数)

来自 cmd 的带有参数的命令:./a.sh getProcessId 包含 java

代码:

getProcessId(){

matchType=$1
#defaulting matchArg to x i.e exact match
matchArg=x
processName=$2

if [[ $matchType == 'contains' ]];then
  matchArg=f
elif [[ $matchType == 'exact' ]];then
  matchArg=x
fi

if processId=`pgrep -$matchArg $processName`
then
 log $selectedLogLevel "process id fetch is successful" 1 "getProcessId"
else
 log $selectedLogLevel "process id fetched is blank" 1 "getProcessId"
fi

echo "$processId"

}

输出 :2 PIDS

  1. 第二种情况(processName 作为全局变量,即 java))

    进程名称='java'

    获取进程ID()

     matchType=$1
     #defaulting matchArg to x i.e exact match
     matchArg=x
    
     if [[ $matchType == 'contains' ]];then
       matchArg=f
     elif [[ $matchType == 'exact' ]];then
       matchArg=x
     fi
    
     if processId=`pgrep -$matchArg $processName`
     then
      log $selectedLogLevel "process id fetch is successful" 1 "getProcessId"
     else
      log $selectedLogLevel "process id fetched is blank" 1 "getProcessId"
     fi
    
     echo "$processId"
    
     }
    

输出 :它仅返回 1 个被执行的 PID。

我的要求是从参数中传递进程名称,然后它应该只返回 1 个 PID。目前我得到了 2 个 PID

答案1

我们已经在这里回答了这个问题:shell 脚本中的 pgrep -f 返回 2 pid 而不是 1

返回的第二个 PID 是运行脚本的进程的 PID。要实现这一点,您必须修改脚本,使其检测自己的命令行,并且不返回该 PID。

相关内容