Linux ps 命令 查看程序应用信息详解 从自动值守查询脚本开始

29 篇文章 0 订阅

先放一个脚本镇楼,有需要可以直接拿去用,chmod +x 加上执行权限就OK了,把查找进程改成自己的。

用的好用,有兴趣再来看看第二章节的ps指令的介绍

可以使用的shell脚本

#!/bin/bash
###
 # @Author       : Zry && 978524088@qq.com
 # @Date         : 2024-05-12 12:31:06
 # @LastEditors  : Zry && 978524088@qq.com
 # @LastEditTime : 2024-07-08 11:11:08
 # @FilePath     : /zry/bin/show_op_info
 # @Description  : 
 # 
 # Copyright (c) 2024 by 978524088@qq.com, All Rights Reserved. 
### 


declare -A printed_pids  # 关联数组,用于记录已打印过的进程ID

print_tree() {
    local pid=$1
    local indent="$2"
    local last=$3

    # 如果已经打印过该进程,则直接返回
    if [[ ${printed_pids[$pid]} -eq 1 ]]; then
        return
    fi
    ((printed_pids[$pid]++))  # 标记该进程已被打印

    # 检查当前进程是否存在
    if ps -p $pid > /dev/null; then
        # 获取当前进程的所有子进程PID
        local children=($(pgrep -P $pid))

        # 获取当前进程的详细信息
        # local proc_info=$(ps -p $pid -o pid,tty,stat,cmd | tail -n 1 | head -n 2)
        local proc_info=$(ps -p $pid -o pid,tty,stat,etimes,time,uid,euser,cmd | tail -n 1)
        # 判断是否是第一个调用
        local prefix=""
        if [ -n "$indent" ]; then
            if [ "$last" = "true" ]; then
                prefix="└── "
            else
                prefix="├── "
            fi
        fi

        # 显示当前进程
        echo -e "$indent$prefix$proc_info"

        # 如果有子进程,递归调用函数显示子进程
        local last_child=true
        for child in "${children[@]}"; do
            if [[ -n $child ]]; then
                if [ "$last_child" = "true" ]; then
                    print_tree $child "$indent  " "true"
                    last_child=false
                else
                    print_tree $child "$indent  " "false"
                fi
            fi
        done
    fi
}

# 检查并显示各个进程的树状图信息 有变化只需要修改 in 后面的 查找进程名称
for process_name in OpUpDataMD OpWebMD OpConnectMD OpIsosSvrProgramMD OpIsosMD; do
    pids=$(pgrep -f "$process_name")
    if [ -n "$pids" ]; then
        echo "进程 $process_name 的详细信息:"
        echo -e "PID   TTY      STAT    ETIME UID  EUSER    COMMAND"
        for pid in $pids; do
            print_tree $pid "" "true"  # 打印根节点,标记为最后一个节点
        done
        echo
    else
        echo "进程 $process_name 没有运行。"
    fi
done

Linux 下的 ps 命令使用介绍

简介

ps 是 Linux 系统中用来查看当前进程状态的工具。它提供了一种快速查看系统进程及其状态的方式,对于系统管理员和用户来说,是诊断问题和监控系统性能的重要工具。

基本语法

ps [options]

常用参数

  • -a
    • 显示终端上的所有进程。
  • -u
    • 以用户易读的格式显示进程信息。
  • -x
    • 显示没有控制终端的进程。
  • -e
    • 显示所有进程。
  • -o
    • 指定显示哪些信息,可以与 ps 命令默认显示的信息一起使用,或者用来替换默认信息。
    • 定义输出格式,后面跟列名,如PID,USER,COMMAND
  • -p
    • 指定进程ID的范围。
  • -f
    • 全格式显示,类似于 ps -ef

参数使用实例

-a 参数使用实例

ps -a

这会列出当前终端的所有进程信息。

-u 参数使用实例

ps -u username
  • 显示特定用户的进程
  • 结合使用-u-U参数,可以显示特定用户的进程。
  • 这个命令会显示指定用户 username 的所有进程,信息将以用户易读的格式显示。

-x 参数使用实例

ps -x

展示所有没有控制终端的进程。

-e 参数使用实例

ps -e

显示系统中的所有进程。使用参数e可以显示系统上的所有进程,包括僵尸进程和守护进程。

-o 参数使用实例

ps -eo pid,cmd,%mem

展示所有进程的进程ID、命令名和内存使用百分比。
按用户排序进程
使用-eo参数指定输出列,并使用sort命令进行排序。

ps -eo pid,user,cmd --sort user

-p 参数使用实例

ps -p PID

显示进程ID为 PID 的进程信息。

显示特定进程的详细信息

使用-f参数可以显示特定进程的完整信息。

ps -f pid

展示全格式的进程信息,相当于 ps -ef

查找名为特定字符串的进程

使用-C参数指定进程名。

ps -C process_name

显示进程树

使用-f参数结合-pgrep可以显示进程树。

ps -ef | grep 'process_name'

使用ps命令的输出作为其他命令的输入

可以将ps的输出通过管道传递给其他命令。

ps -u username | grep 'process_name'

显示进程的详细信息并排序

结合使用-o--sort参数,可以自定义显示列并进行排序。

ps -eo pid,user,etime,cmd --sort=-pid

在使用 ‘ps’ 命令时,如何排除某些特定的进程?

在使用ps命令时,排除特定进程通常不是直接通过ps命令的参数来实现的,因为ps命令本身并没有提供直接排除特定进程的选项。但是,可以通过以下几种方法间接实现排除特定进程的目的:

  1. 使用grep命令排除:
    使用ps命令获取进程列表,然后通过管道将输出传递给grep命令,并使用-v参数来排除包含某些特定文本的行。

    ps aux | grep -v 'process_name'
    

    这里'process_name'是你想要排除的进程名称。grep -v命令会排除所有包含'process_name'的行。

  2. 使用awk命令排除:
    awk是一个强大的文本处理工具,可以用来排除特定的进程。

    ps aux | awk '!/pattern_to_exclude/'
    

    在这个例子中,'pattern_to_exclude'是一个正则表达式,用来匹配你想要排除的进程。

  3. 组合使用grepgrep -v
    有时候,你可能需要排除多个特定的进程名称,可以结合使用grep来获取想要的进程,然后使用grep -v来排除不想要的进程。

    ps aux | grep 'desired_process' | grep -v 'excluded_process1' | grep -v 'excluded_process2'
    
  4. 使用pgreppkill命令排除:
    如果你知道要排除的进程的确切名称或PID,可以使用pgrep来获取这些进程的PID,然后使用pkill来杀死它们。

    pgrep -f 'excluded_process' | xargs pkill -P
    

    这个命令会查找所有包含'excluded_process'的进程,并通过xargs将它们的PID传递给pkill -P来杀死它们。

  5. 使用ps命令的输出作为其他命令的条件:
    你可以使用ps命令的输出作为其他命令的条件,通过逻辑判断来排除特定的进程。

    ps aux | while read line; do
        if ! echo "$line" | grep -q 'excluded_process'; then
            echo "$line"
        fi
    done
    

    这个脚本会逐行读取ps的输出,如果某行不包含'excluded_process',则打印该行。

:,排除进程的方法取决于你具体的需求和场景。上述方法提供了一些基本的思路,可以根据实际情况进行调整和组合使用。

如何快速找到特定进程的详细信息

  1. 使用tophtop命令: 如果你想要实时监控特定进程的资源使用情况,可以使用tophtop命令,并使用进程名或PID过滤。
top -p PID`

或者在htop中按F3,然后输入进程名或PID进行过滤。

  1. 使用pstree命令查看进程树: 如果你想要查看特定进程及其子进程的树状结构,可以使用pstree
pstree -p PID

分享一个有趣的 学习链接

  • 28
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值