我是bash脚本的新手,我必须确定一个进程是否在linux环境中运行。 实际上我使用follow命令来完成这项工作:
#ps -ef | awk '{print substr($0, index($0,$8))}' | grep -v grep | grep -w -F $PROCESSNAME
其中
awk '{print substr($0, index($0,$8))}'
允许我忽略UID PID PPID C STIME TTY TIME字段和
grep -v grep
允许我忽略包含命令本身的行。所以在这一点上,我有一个在系统上运行的所有进程的列表。
最后:
grep -w -F $PROCESSNAME
读取一个变量,其中包含我要检查的进程的名称。 据我所知,full命令应该只返回具有$ PROCESSNAME
的确切值的行实际上,对于遵循模式" [processname]"以及可能还有其他模式的流程,这不能正常工作。
例如为了简化,如果我有一个名为&#34的正在运行的进程; [vmmemctl]"我跑:
#ps -ef | grep -v grep | grep -w -F "vmmemctl]"
它实际上会返回一个结果:
#root 615 2 0 Feb26 ? 00:01:00 [vmmemctl]
但命令中的实际进程名称与结果中的进程名称不同。 没有这种行为的正确命令是什么?
谢谢
答案 0 :(得分:0)
awk
救援!
ps -ef | awk '$8=="[command]"{NF=8;print}'
或
ps -ef | awk -v c="vmmemctl]" '$8==c{NF=8;print}'
请注意,这是完全匹配而不是模式。
因为这是完全匹配,所以命令可以包含空格和其他特殊字符(它不是模式匹配而是字符串相等)。使用您的变量名称,它将如下所示
ps -ef | awk -v c="$PROCESSNAME" '$8==c{NF=8;print}'