从pgrep获取单个PID

时间:2017-03-31 07:34:13

标签: linux grep ksh

当我在shell上执行以下命令时,它返回预期的PID,例如: 4676:

pgrep -f konakart

但是当在脚本上使用该行时,它会返回两个ID(预期的一个ID,我想另一个ID):

# vim test.sh
#!/bin/ksh
echo $(pgrep -f $1)


# ./test.sh konakart
4676 17847

这些线路有什么问题?

2 个答案:

答案 0 :(得分:1)

您没有考虑在命令行输入的命令。

在命令行提交时,您的正确说明只有一个命令在其完整描述中运行了单词konakart。

现在你正在调用脚本......怎么样?

./test.sh konakart

那么现在有多少命令在他们的完整列表中有单词konakart?

答案是2,你认为你正在寻找的那个,你刚才提交的那个你把命令行放在命令行上来调用你的脚本的那个;)

答案 1 :(得分:0)

如上所述(在grails回答中)这里是我的检查 - 剪切了icinga:

# vim check_process
#!/bin/ksh
rc=0
#kkPID=$(pgrep -f konakart)
#kkPID=$(ps -ef | awk '/[k]onakart/{print $2}')
#kkPID=$(ps -eo pid,command | grep "konakart" | grep -v grep | awk '{print $1}')
pid=$(pgrep -fl $1 | grep -v "check_process" | sed "s/\(\d*\) .*/\1/")
if [ -z "$pid" ]
then
  msg="CRITICAL - No $1 process found"
  rc=2
else
  msg="OK - $1 runs on PID: $pid"
fi
echo $msg
return $rc