微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

shell 实现 ps 获取内容 以及简单的管道讲解

下面是正确的实现方式,把所有的查询到ps相关信息都给获取到,

#!/bin/bash

source /etc/profile
MGT_Process=('/sbin/Nginx$' '/Nginx/etcd_proxy.conf$' '/Nginx/Nginx.conf$')
NGX_Process=('/sbin/Nginx$' '/Nginx/etcproxy.conf$' '/Nginx/Nginx.conf$')
LVS_Process=('/sbin/Nginx$' /Nginx/proxy.conf' 'keepalived')

checkLVSProcess(){
for process in ${LVS_Process[*]};do
i=1
cmd_tmp=""
exist_flag=0
OLD_IFS="$IFS"
IFS=$'\n'
for line in `ps -eo user,pid,lstart,stat,%cpu,%mem,command|grep $process |grep -v grep`
do
IFS="$OLD_IFS"
for list in $line
do
arr_tmp[$i]=$list
if [ $i -gt 10 ];then
cmd_tmp=$cmd_tmp${arr_tmp[$i]}" "
fi
i=$[$i+1]
done
exist_flag=1
echo "state=ative,user=${arr_tmp[1]},pid=${arr_tmp[2]},stat=${arr_tmp[8]},cpu=${arr_tmp[9]},mem=${arr_tmp[10]},command=${cmd_tmp}"
cmd_tmp=""
i=1
done
if [ $exist_flag -eq 0 ];then
echo "state=noative,command=${cmd_tmp}"
fi
arr_tmp=()
done
}


process_Check(){


if [ -d /usr/local/NSP/etc/lua ];then
echo "==Process_Monitor(Process_Cmd)"
checkLVSProcess
fi


}

process_Check

在这里要特别说明一下,while read line ,如果while readline 用的是管道的方法,在循环中赋值的变量是无法传值给外部的,因为管道用的是subshell (子进程),也就是while 循环执行的语句是在另外一个进程中执行的,所以赋值无法传给循环外部。这个就是网上有很多人说,为什么时候while循环赋值有效,有时却不起效,请注意是不是在同一进程执行。

示例

#!/bin/bashsource /etc/profileMGT_Process=('/sbin/Nginx$' '/Nginx/etcd_proxy.conf$' '/Nginx/Nginx.conf$')NGX_Process=('/sbin/Nginx$' '/Nginx/etcproxy.conf$' '/Nginx/Nginx.conf$')LVS_Process=('/sbin/Nginx$' /Nginx/proxy.conf' 'keepalived')checkLVSProcess(){ for process in ${LVS_Process[*]};do i=1 cmd_tmp="" exist_flag=0 ps -eo user,command|grep $process |grep -v grep |while read line do for list in $line do arr_tmp[$i]=$list if [ $i -gt 10 ];then cmd_tmp=$cmd_tmp${arr_tmp[$i]}" " fi i=$[$i+1] done exist_flag=1 echo "state=ative,command=${cmd_tmp}" cmd_tmp="" done if [ "outer:"$exist_flag -eq 0 ];then echo "state=noative,command=${cmd_tmp}" fi arr_tmp=()done}

原文地址:https://www.jb51.cc/bash/388136.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐