【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(一) 进程信息查看

简介: 【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(一) 进程信息查看
  • 本系列文章,将整理一系列Linux环境下进程相关的操作命令,包括进程启动、kill、挂起、查看、前后台进程切换等各种命令。


  • 本文为本系列的第一篇,进程的查看,主要关注如何查看进程的相关信息。


ps


  • process status,命令用于显示当前进程的状态,类似于 windows 的任务管理器。


  • 进程的相关信息,包括PID、内存、CPU、命令行、用户态/内核态、进程的虚拟大小、内存中页的数量、执行状态信息等;


  • ps的显示的结果是执行ps命令的那个时刻的那些进程;


  • 例子1:显示所有进程:


[qxhgd@localhost ~]$ ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.2  0.2 125588  4168 ?        Ss   03:41   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    03:41   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S    03:41   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    03:41   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    03:41   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    03:41   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    03:41   0:00 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S    03:41   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    03:41   0:00 [watchdog/0]


  • 例子2:显示qxhgd用户发起的进程:


[qxhgd@localhost ~]$ ps -u qxhgd
   PID TTY          TIME CMD
  2366 ?        00:00:00 sshd
  2371 pts/0    00:00:00 bash
  2401 ?        00:00:00 sshd
  2406 ?        00:00:00 sftp-server
  2590 pts/0    00:00:00 ps


  • 例子3、查找涉及sshd的进程


[qxhgd@localhost ~]$ ps -ef | grep sshd
root       1323      1  0 03:41 ?        00:00:00 /usr/sbin/sshd -D
root       2362   1323  0 03:50 ?        00:00:00 sshd: qxhgd [priv]
root       2364   1323  0 03:50 ?        00:00:00 sshd: qxhgd [priv]
qxhgd      2366   2362  0 03:50 ?        00:00:00 sshd: qxhgd@pts/0
qxhgd      2401   2364  0 03:50 ?        00:00:00 sshd: qxhgd@notty
qxhgd      2645   2371  0 04:06 pts/0    00:00:00 grep --color=auto sshd


pstree


  • display a tree of processes,命令将所有进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的进程。


  • 一个例子:


[qxhgd@localhost] pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─abrt-watch-log
        ├─abrtd
        ├─agetty
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ...


pstack


  • pstack 是一个shell脚本,用于打印正在运行的进程的栈跟踪信息,它实际上是 gstack 的一个链接,而gstack本身是基于gdb封装的shell脚本。


  • 一个例子,显示pid未2371的sshd的堆栈信息:


[qxhgd@localhost ~]$ ps -u qxhgd
   PID TTY          TIME CMD
  2366 ?        00:00:00 sshd
  2371 pts/0    00:00:00 bash
  2401 ?        00:00:00 sshd
  2406 ?        00:00:00 sftp-server
  2590 pts/0    00:00:00 ps
[qxhgd@localhost ~]$ pstack 2371
#0  0x00007f6fc200245c in waitpid () from /lib64/libc.so.6
#1  0x0000000000440b84 in waitchld.isra.10 ()
#2  0x0000000000441e3c in wait_for ()
#3  0x0000000000433b0e in execute_command_internal ()
#4  0x0000000000433d2e in execute_command ()
#5  0x000000000041e365 in reader_loop ()
#6  0x000000000041c9ce in main ()


pgrep


  • pgrep能查找当前正在运行的进程并列出符合条件的进程ID。


  • 例如显示sshd的PID:


[qxhgd@localhost ~]$ pgrep sshd
1323
2362
2364
2366
2401


top


  • top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器;


  • 和ps类似,但是不同的是,top显示的是实时的数据(默认3秒,刷新数据),人工不干预,则shell不会退出top命令;而ps显示的是执行ps当时的进程数据,执行完ps,shell上就结束ps命令了;


  • 几个常用的操作命令参数:


top //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数


  • 一个例子:


[qxhgd@localhost ~]$ top
top - 04:12:48 up 31 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 238 total,   2 running, 236 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863076 total,   992972 free,   526040 used,   344064 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1176936 avail Mem
USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
qxhgd     20   0  162152   2408   1584 R  0.3  0.1   0:00.42 top
root      20   0  125588   4180   2620 S  0.0  0.2   0:01.94 systemd
root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
root      20   0       0      0      0 S  0.0  0.0   0:00.16 ksoftirqd/0
root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
root      20   0       0      0      0 R  0.0  0.0   0:00.58 rcu_sched
root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain
root      rt   0       0      0      0 S  0.0  0.0   0:00.02 watchdog/0
root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns


top的变种


htop


  • Linux系统中的一个互动的进程查看器,与Linux传统的top比较的话,htop更人性化,可认为是top的升级版本;


  • 可以在垂直和水平方向上滚动,所以你可以看到系统上运行的所有进程,以及他们完整的命令行;


  • 可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing);


  • 安装方式:


#安装epel源
yum install epel-release
#安装htop
yum install -y htop
#安装完毕后命令行输入
htop


一个执行的例子:



atop


  • atop是一个功能非常强大的linux服务器监控工具,它的数据采集主要包括:CPU、内存、磁盘、网络、进程等,并且内容非常的详细,特别是当那一部分存在压力它会以特殊的颜色进行展示,如果颜色是红色那么说明已经非常严重了;


  • 所有的信息都是反映过去10s的状态信息;


  • 一个执行atop的例子:


[qxhgd@localhost ~]$ atop
ATOP - localhost                             2022/01/24  04:26:47                             -----------------                             10s elapsed
PRC |  sys    0.06s |  user   0.05s |  #proc    238  | #trun      2  |  #tslpi   375 |  #tslpu     0 |  #zombie    0  | clones     2  | no  procacct  |
CPU |  sys       1% |  user      0% |  irq       0%  | idle     99%  |  wait      0% |  steal     0% |  guest     0%  |               | curf 2.30GHz  |
CPL |  avg1    0.11 |  avg5    0.14 |  avg15   0.10  |               |  csw      529 |               |  intr     435  |               |numcpu     1  |
MEM |  tot     1.8G |  free  669.8M |  cache 572.2M  | dirty   2.2M  |  buff    2.1M |  slab   94.8M |  shmem  10.4M  | shrss   0.0M  | numnode    1  |
SWP |  tot     2.0G |  free    2.0G |  swcac   0.0M  |               |               |               |                | vmcom   2.0G  | vmlim   2.9G  |
NET |  transport    |  tcpi       8 |  tcpo       8  | udpi       0  |  udpo       0 |  tcpao      0 |  tcppo      0  | tcprs      4  | udpie      0  |
NET |  network      |  ipi        8 |  ipo       11  | ipfrw      0  |  deliv      8 |               |                | icmpi      0  | icmpo      0  |
NET |  eth0      0% |  pcki       8 |  pcko      12  | sp 1000 Mbps  |  si    0 Kbps |  so    3 Kbps |  erri       0  | erro       0  | drpo       0  |
   PID    SYSCPU     USRCPU     RDELAY     VGROW      RGROW     RUID         EUID        ST     EXC      THR    S     CPUNR      CPU     CMD        1/1
  3021     0.04s      0.04s      0.00s    104.5M       2.9M     qxhgd        qxhgd       --       -        1    R         0       1%     atop
  1420     0.00s      0.01s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     smbd
  2366     0.01s      0.00s      0.00s        0B         0B     qxhgd        qxhgd       --       -        1    S         0       0%     sshd
  2942     0.01s      0.00s      0.02s        0B         0B     root         root        --       -        1    S         0       0%     kworker/0:2
  1329     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     nmbd
   854     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        2    S         0       0%     vmtoolsd
   882     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     abrt-watch-log
  1738     0.00s      0.00s      0.00s        0B         0B     postfix      postfix     --       -        1    S         0       0%     qmgr
  1737     0.00s      0.00s      0.00s        0B         0B     postfix      postfix     --       -        1    S         0       0%     pickup
   861     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     rngd
  1482     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     smbd-notifyd
  1484     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     cleanupd
  1728     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     master
   872     0.00s      0.00s      0.00s        0B         0B     rtkit        rtkit       --       -        3    S         0       0%     rtkit-daemon
     6     0.00s      0.00s      0.03s        0B         0B     root         root        --       -        1    S         0       0%     ksoftirqd/0
     9     0.00s      0.00s      0.07s        0B         0B     root         root        --       -        1    R         0       0%     rcu_sched
   525     0.00s      0.00s      0.00s        0B         0B     root         root        --       -        1    S         0       0%     kworker/0:1H


btop


  • btop,一个美观的系统资源监视器,显示处理器、内存、磁盘、网络和进程的使用情况和统计信息。btop是更轻、更快的C++ 版本,是bashtop和bpytop的延续。


ytop


  • ytop is a nice program if you want to see nice graphs showing CPU, memory and network utilization in a console. It does have a process list but it is not very powerful or useful as a process manager even though there are some keyboard shortcuts for basic process management available.


gtop


  • gtop 是一款用 JavaScript 编写的开源系统资源监控实用程序,它是 Linux 系统自带 top 工具的替代品。虽然 gtop 工具的曝光率和流行程度远不如 htop,但它还是非常值得系统管理员一试。


vtop


  • Command-line tools like “top” make it difficult to see CPU usage across multi-process applications (like Apache and Chrome), spikes over time, and memory usage. That’s why we created vtop.


  • Vtop is a free and open source activity monitor for the command line. It is written in node.js and can be easily extended.


Gotop


  • Gotop 是一个 TUI 图形活动监视器,使用 Go 语言编写。它是完全免费、开源的,受到了 gtop 和 vtop 的启发。


Ptop


  • 使用 Python 编写的 ptop。它同样是一个自由开源的、在 MIT 许可下发布的系统活动监视器。


  • ptop 同时兼容 Python2.x 和 Python3.x,因此可以使用 Python 的软件包管理器 pip 轻松安装。


Hegemon


  • Hegemon 是一个正在开发中的模块化系统监视器,以安全的 Rust 编写。


  • 它允许用户在单个仪表板中监控两种使用情况。分别是系统利用率和硬件温度。


GUI环境


  • ubuntu系统的gnome-system-monitor,类似于windows的进程管理器;


lsof


  • 功能为列举系统中已经被打开的文件(设备、目录、sockets等),如果没有指定任何选项或参数,lsof则列出所有活动进程打开的所有文件。


  • 两个例子:


 lsof -i:22 #查看打开22端口的进程
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    1582 root    3u  IPv4  11989      0t0  TCP *:ssh (LISTEN)
    sshd    1582 root    4u  IPv6  11991      0t0  TCP *:ssh (LISTEN)
    sshd    2829 root    3r   IPv4  19635      0t0  TCP bogon:ssh->bogon:15264 (ESTABLISHED)
[qxhgd@localhost ~]$ lsof -p 1 #查看pid为1的进程(init)打开的文件,其输出结果等同于上面的命令,他们都是init
COMMAND PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
systemd   1 root  cwd   unknown                      /proc/1/cwd (readlink: Permission denied)
systemd   1 root  rtd   unknown                      /proc/1/root (readlink: Permission denied)
systemd   1 root  txt   unknown                      /proc/1/exe (readlink: Permission denied)
systemd   1 root NOFD                                /proc/1/fd (opendir: Permission denied)


jobs


  • 作业控制命令,可以用来查看当前终端放入后台的工作;


  • 该命令在本系列的后续文章中还会涉及;


pidof


  • pidof 是Linux系统中用来查找正在运行进程的进程号(pid)的工具,功能类似pgrep和ps;


  • 例子:


[qxhgd@localhost ~]$ pidof sshd
2401 2366 2364 2362 1323
[qxhgd@localhost ~]$ pidof -s sshd
2401
[qxhgd@localhost ~]$


w


  • 用于显示目前登入系统的用户信息,目前登入系统的用户有哪些人,以及他们正在执行的程序 ,也即:


w - Show who is logged on and what they are doing.


  • 一个例子:


[qxhgd@localhost ~]$ w
 04:31:38 up 50 min,  1 user,  load average: 0.01, 0.06, 0.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
qxhgd    pts/0    192.168.2.2      03:50    2.00s  0.13s  0.00s w


/proc/pid


  • 每个进程,都有一个以其pid号为目录名的文件夹,其中涉及的proc文件的常用参数如下:


/proc/pid/cmdline #进程启动命令
/proc/pid/cwd     #链接到进程当前工作目录
/proc/pid/environ #进程环境变量列表
/proc/pid/exe     #链接到进程的执行命令文件
/proc/pid/fd      #包含进程相关的所有的文件描述符
/proc/pid/maps    #与进程相关的内存映射信息
/proc/pid/mem     #指代进程持有的内存,不可读
/proc/pid/root    #链接到进程的根目录
/proc/pid/stat    #进程的状态
/proc/pid/statm   #进程使用的内存的状态
/proc/pid/status  #进程状态信息,比stat/statm更具可读性
/proc/self        #链接到当前正在运行的进程


  • 值得一提的是,proc/pid目录下文件内容,是前面其他命令获得信息的主要来源;


  • 以我环境上pid 1下的文件为例:


[qxhgd@localhost 1]$ sudo ls
attr       clear_refs       cpuset   fd       limits     mem         net        oom_score      personality  schedstat  stack   syscall  wchan
autogroup  cmdline          cwd      fdinfo   loginuid   mountinfo   ns         oom_score_adj  projid_map   sessionid  stat    task
auxv       comm             environ  gid_map  map_files  mounts      numa_maps  pagemap        root         setgroups  statm   timers
cgroup     coredump_filter  exe      io       maps       mountstats  oom_adj    patch_state    sched        smaps      status  uid_map


pidstat


  • pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况;


  • pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。


  • 常用命令参数示例:


pidstat                 #查看所有进程的 CPU 使用情况
pidstat -u -p ALL       #等价于pidstat
pidstat -u              #等价于pidstat
pidstat -r              #进程的内存情况统计
pidstat -d              #进程的IO情况
pidstat -w -p 8888      #进程的上下文切换情况
相关文章
|
2月前
|
关系型数据库 MySQL
MySQL查看连接数和进程信息
这篇文章介绍了如何在MySQL中查看连接数和进程信息,包括当前打开的连接数量、历史成功建立连接的次数、连接错误次数、连接超时设置,以及如何查看和终止正在执行的连接进程。
472 10
|
29天前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
29 0
|
4天前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
26 4
linux进程管理万字详解!!!
|
2天前
|
缓存 监控 Linux
|
4天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
24 4
|
5天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
6天前
|
消息中间件 存储 Linux
|
13天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
12 1
|
24天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
【10月更文挑战第9天】本文将深入浅出地介绍Linux系统中的进程管理机制,包括进程的概念、状态、调度以及如何在Linux环境下进行进程控制。我们将通过直观的语言和生动的比喻,让读者轻松掌握这一核心概念。文章不仅适合初学者构建基础,也能帮助有经验的用户加深对进程管理的理解。
18 1
|
29天前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
26 0
Linux c/c++之IPC进程间通信