在Shell脚本中获取进程的PID

May*_*ain 13 unix linux shell pid

我正在编写一个shell脚本,我希望得到一个名为"ABCD"的进程的PID.我做的是:

process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)

这得到两个进程的PID,即进程ABCD和GREP命令本身,如果我不想获得GREP的PID执行,我只想要ABCD进程的PID?

请建议.

blu*_*lue 37

只是grep grep本身!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)

  • 避免第二个grep的一个技巧是给`grep`一个匹配同一个东西的正则表达式,但在命令行上显示不同:`... | grep"[A] BCD"| awk ......` (2认同)

wiz*_*ard 25

你试过用pidof ABCD 吗?

  • 这对大多数情况来说实际上是一个更好的答案 (6认同)
  • 或者`pgrep ABCD` (2认同)

小智 6

它非常简单。ABCD应该替换为您的进程名称。

#!/bin/bash

processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }')
echo $processId
Run Code Online (Sandbox Code Playgroud)

有时您需要用软件名称替换ABCD。示例-如果您运行类似的Java程序,java -jar TestJar.jar &则需要用TestJar.jar替换ABCD