练习---shell脚本查看系统所有进程

来源:互联网 发布:讯鸟软件怎么样 编辑:程序博客网 时间:2024/04/20 20:57
#!/bin/bash

#process_info : show the process information on current system as form in "HTML"

#1 获取系统当前时间
#2 查询系统当前所有进程,通过ps aux获取,
#3 规范化输出每个用户当前的进程,及每个进程的当前状况

#output html page to view directly on brower
TITLE="系统程序运行情况明细"
Pro_info=

#报告系统当前时间
report_uptime () {
    echo $(uptime)
    return
}

#把系统信息存到临时文件,方便以后操作
get_process_info_temp () {
    rm processinfo.*
    mktemp  processinfo.XXX
    Pro_info=processinfo.*
    ps auxh  | sort -k2n > $Pro_info
}

#将创建的临时文件删除
rm_process_info_temp () {
    rm processinfo.*
    return
}

#统计总的进程数量
count_whole_process () {
    cat $Pro_info |  wc -l
}

#对tty项进行解析
type_on_tty () {
    if [ "?" == $1 ] ; then
        echo "无终端进程"
    else
        echo "终端号:$1"
    fi
    return
}

#对stat项进行解析
type_on_stat () {
    case $1 in
    S*)    echo "睡眠状态(可中断)"
        ;;
    D*)    echo "睡眠状态(不可中断)"
        ;;
    R*)    echo "运行状态"
        ;;
    T*)    echo "僵尸状态"
        ;;
    X*)    echo "死亡状态"
        ;;
    Z*)    echo "死进程(结束时没有接受父进程处理)"
        ;;
    W*)    echo "页面状态"
        ;;
    *)    echo "状态未知"
        ;;
    esac
}

#输出每个进程的相关信息到HTML当中
report_process_info () {
    local count=1;
    while read user pid cpu men vsz rss tty stat start time command ; do
    echo "<PRE>"
    cat <<- EOF
        NO.$count
        -------------------------------------
        Command :    $command
        Username:    $user
        PID    :    $pid
        CPU(%)  :    $cpu
        Men(%)    :    $men
        Vsz    :    $vsz
        Rss    :    $rss
        Tty    :    $(type_on_tty $tty)
        Stat    :    $(type_on_stat $stat)
        Start    :    $start
        Time    :    $time    
        
        -------------------------------------
    EOF
    echo "</PRE>"
    count=$((count+1))
done  < <(cat $Pro_info)
}
write_html_page () {
cat << _EOF_
<HTML>
<META http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <HEAD>
        <TITLE>$TITLE</TITLE>
    </HEAD>
        <BODY>
        <CENTER><h1>$TITLE</h1></CENTER>
        <P>$TIMESTAMP</P>
        $(report_uptime)
        <P>当前系统总进程数量为: $(count_whole_process)</P>
        
        $(report_process_info)
        </BODY>
</HTML>
_EOF_
    return
}
########################################################
#################实际操作流程############################

#获取系统进程信息
get_process_info_temp

#生成相关HTML页面
write_html_page > process.html

#删除临时文件
rm_process_info_temp

0 0