我读了很多关于这个论点的问题,但我无法解决我的问题。
我需要获取特定的进程ID,并编写了以下test.sh
脚本:
#!/bin/sh
PID=$(ps -ef | grep abc | grep -v grep | awk '{print $2}')
echo $PID
运行此脚本如果abc
进程未运行,我将获得两个不同的PID,如果abc进程正在运行,则会获得三个不同的PID。
如果我运行
ps -ef | grep abc | grep -v grep | awk '{print $2}'
来自shell的命令我得到了正确的结果。
修改删除最后test.sh
的{{1}}脚本我注意到脚本打印了以下输出:
awk
怎么可能,我怎么能忽略它们?
答案 0 :(得分:3)
如果您确切知道所调用的流程是什么,请使用pidof
,否则,您只需使用pgrep
即可保存grep|grep|awk...
。
请注意,当您ps|grep regex
或pgrep regex
时,您的结果中可能会有多个条目。
答案 1 :(得分:2)
请勿使用这些工具,使用适合此目的的正确工具,使用pidof
兼容POSIX
标记命令-s
,根据man
页面说明,< / p>
-s Single shot - this instructs the program to only return one
pid.
使用上述内容,
processID=$(pidof -s "abc")
答案 2 :(得分:2)