【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      #进程的上下文切换情况
相关文章
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
7月前
|
监控
ps 进程中的字段信息
该表介绍了进程管理中的关键字段,包括进程ID、用户、CPU与内存使用情况、运行时间、状态及优先级等信息,用于监控和分析系统中各进程的资源占用与运行状态。
313 10
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
426 67
|
12月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
346 16
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
239 20
|
11月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
256 0
|
11月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
326 0
|
11月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
205 0
|
11月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
264 0
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
664 34