Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从pgrep获取单个PID_Linux_Grep_Ksh - Fatal编程技术网

Linux 从pgrep获取单个PID

Linux 从pgrep获取单个PID,linux,grep,ksh,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 这些行有什么问题?您没有考虑在命令行中输入的命令 在命令行中提交时,您可以正确地看到,只有一个命令在完整描述中使用konakart一词运行 现在您正

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

pgrep -f konakart
但是当在脚本上使用这一行时,它返回两个ID—预期的ID,我猜另一个ID来自它自己:

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


# ./test.sh konakart
4676 17847

这些行有什么问题?

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

在命令行中提交时,您可以正确地看到,只有一个命令在完整描述中使用konakart一词运行

现在您正在调用脚本。。。怎么做

./test.sh konakart
那么现在有多少命令的完整列表中有konakart这个词呢


答案是2,一个你认为你正在寻找的,一个你刚刚提交的,你把这个词放在命令行上调用你的脚本

正如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

你真的需要-f/-full吗?对我来说看起来像是重复的:而且,不是bash脚本。。。这是一个korn shell脚本,由表示/垃圾箱/ksh@TatsuyukiIshi:我需要完整的输出,因为它通过jvm@fortyfour-不,它不会对命令输出产生影响,但您已经向用户展示了一件事,并表示它有所不同。一个更复杂的脚本,它很可能会有所不同,因为两种语言不支持所有相同的功能和命令:没错。我在上次评论中提到了这一点。但这怎么可能从我的搜索中删除呢?有什么建议吗?你可能需要对全局提出建议?简单的回答是,您可以使用第二个正常的grep with-v选项忽略您的测试。sh谢谢您的提示:我现在使用:echo$pgrep-fl$1 | grep-v test.sh,唯一的事情是删除processname。我还想问一下您为什么要使用echo?您可能还想查看pgrep可用的其他选项,看看它们是否有更好的解决方案。如前所述,在不知道您的实际脚本需求的情况下,我们可以帮助您:我想使用它来检查进程是否正在运行,以检查icinga。为了对不同的进程执行此操作,我传递了不同的参数。出于格式化原因,我粘贴了完整的代码作为答案。根据您是否知道可能只有一个进程在运行,您可以使用pgrep-fo$1,或者如果您知道您要查找的进程是唯一的项目,您可以查看-x选项