【发布时间】:2013-06-02 15:19:22
【问题描述】:
我正在编写一个 shell 脚本,我想获取一个名为“ABCD”的进程的 PID。我所做的是:
process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`
这会获取两个进程的 PID,即进程 ABCD 和 GREP 命令本身,如果我不想执行 GREP 的 PID 而我只想要 ABCD 进程的 PID,该怎么办?
请提出建议。
【问题讨论】:
我正在编写一个 shell 脚本,我想获取一个名为“ABCD”的进程的 PID。我所做的是:
process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`
这会获取两个进程的 PID,即进程 ABCD 和 GREP 命令本身,如果我不想执行 GREP 的 PID 而我只想要 ABCD 进程的 PID,该怎么办?
请提出建议。
【问题讨论】:
只需 grep 离开 grep 本身!
process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
【讨论】:
$$ 变量获得
grep 一个正则表达式匹配相同的东西,但在命令行中显示不同:... | grep "[A]BCD" | awk ...。
你试过用pidof ABCD吗?
【讨论】:
pgrep ABCD
这是非常直接的。 ABCD 应替换为您的进程名称。
#!/bin/bash
processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }')
echo $processId
有时您需要将 ABCD 替换为软件名称。示例 - 如果您运行像 java -jar TestJar.jar & 这样的 java 程序,那么您需要将 ABCD 替换为 TestJar.jar。
【讨论】:
ps 有一个选项:
process_id=`/bin/ps -C ABCD -o pid=`
【讨论】:
您也可以取消 grep 并仅使用 awk。
使用awk 的expression matching 匹配进程名称,但不匹配自身。
/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'
【讨论】:
您可以使用此命令来 grep 特定进程的 pid & echo $b 打印任何正在运行的进程的 pid:
b=`ps -ef | grep [A]BCD | awk '{ printf $2 }'`
echo $b
【讨论】:
ps | pgrep ABCD
你可以试试上面的命令返回ABCD进程的进程id。
【讨论】:
我找到了更好的方法。
top -n 1 | grep "@#" | grep -Eo '^[^ ]+'
【讨论】: