进程和计划任务管理(2)

简介: 内核的功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等。1 程序1.1 什么是程序?是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。用于描述进程要完成的功能,是控制进程执行的指令集。保存在硬盘、光盘等介质中的可执行代码和数据。静态保存的代码。

prtstat -r,格式显示

[root@localhost ~]# prtstat -r 1121
          pid: 1121                                comm: sshd
        state: S                                   ppid: 1
         pgrp: 1121                             session: 1121
       tty_nr: 0                                  tpgid: -1
        flags: 40402100                          minflt: 1288
      cminflt: 0                                 majflt: 9
      cmajflt: 0                                  utime: 1
        stime: 2                                 cutime: 0
       cstime: 0                               priority: 20
         nice: 0                            num_threads: 1
  itrealvalue: 0                              starttime: 2643
        vsize: 108539904                            rss: 1021
       rsslim: 18446744073709551615                   startcode: 94108043177984
      endcode: 94108043995684                startstack: 140728038798720
      kstkesp: 7FFDCCC32B58                     kstkeip: 7F1FD7DE9783
        wchan: 18446744071581032117                       nswap: 0
       cnswap: 18446744071581032117                 exit_signal: 17
    processor: 0                            rt_priority: 0
       policy: 0                  delayaccr_blkio_ticks: 34
   guest_time: 0                            cguest_time: 0
复制代码


网络异常,图片无法展示
|


3.5 pstree命令——以树形结构列出进程信息

命令格式:

pstree  [OPTION]  [ PID | USER ]    
复制代码


常用选项:

  • -a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
  • -p:显示PID。
  • -p < pid> : 显示指定进程及其子进程,同时显示每个进程的PID。
  • -u:显示进程的用户名称。
  • -u 用户名:显示指定用户的进程。
  • -H < pid>:高亮显示指定进程及其前辈进程。
  • -T:不显示线程thread,默认显示线程。

示例:

1)pstree PID,显示指定进程及其子进程

[root@localhost ~]# pstree 1121          //显示1121进程及其子进程
 sshd─┬─sshd─┬─bash───pstree
      │      ├─bash───top
      │      └─bash───sleep
      └─sshd───6*[sftp-server]
复制代码


2)pstree -p PID,显示指定进程及其子进程,同时显示PID。

[root@localhost ~]# pstree -p 1121       //显示1121进程及其子进程,同时显示PID
 sshd(1121)─┬─sshd(1872)─┬─bash(1876)───pstree(94984)
            │            ├─bash(1903)───top(2063)
            │            └─bash(94973)───sleep(94983)
            └─sshd(1902)─┬─sftp-server(1931)
                         ├─sftp-server(1963)
                         ├─sftp-server(1974)
                         ├─sftp-server(1992)
                         ├─sftp-server(2000)
                         └─sftp-server(2019)
复制代码


3)pstree -u 用户名,显示指定用户的进程。

[root@localhost ~]# pstree -u nancy -p     //显示nancy用户的进程,同时显示进程号。
 bash(109643)───su(109754,root)───bash(109807)───pstree(110068)
复制代码


4)-a,显示启动进程的完整指令,包括启动进程的路径、参数等。

[root@localhost ~]# pstree 1645 -a        //显示启动1645进程的完整指令
 wpa_supplicant -u -f /var/log/wpa_supplicant.log -c/etc/wpa_supplicant/wpa_sup
复制代码


5)-aup,同时显示启动进程的完整指令、进程的所属用户、进程PID。

[root@localhost ~]# pstree -aup
复制代码


3.6 lsof命令——列举被打开的文件

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

命令格式:

lsof  [options] 
复制代码


常用选项:

选项 功能
-c 字符串 只列出以字符串开头的进程打开的文件。
+d 目录名 列出某个目录中所有被进程调用的文件。
-u 用户名 只列出某个用户的进程打开的文件。
-p pid 列出某个 PID 进程打开的文件。


示例:

[root@localhost ~]# lsof | more              //查询系统中所有进程调用的文件
 [root@localhost ~]# lsof +d /dev |more      //显示/dev目录下所有被打开的文件及对应进程
 [root@localhost ~]# lsof -u nancy           //查询nancy用户打开的所有文件
 [root@localhost ~]# lsof -p 655             //查询655进程打开的所有文件
 COMMAND   PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
 xfs-log/s 655 root  cwd       DIR  253,0     4096   64 /
 xfs-log/s 655 root  rtd       DIR  253,0     4096   64 /
 xfs-log/s 655 root  txt   unknown                      /proc/655/exe
 [root@localhost ~]# lsof /bin/bash          //查询打开/bin/bash文件的所有进程
 COMMAND    PID  USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
 ksmtuned   894  root txt    REG  253,0   960472 25197358 /usr/bin/bash
 bash      1955  root txt    REG  253,0   960472 25197358 /usr/bin/bash
 bash      1983  root txt    REG  253,0   960472 25197358 /usr/bin/bash
 bash     18235 nancy txt    REG  253,0   960472 25197358 /usr/bin/bash
 bash     18439  root txt    REG  253,0   960472 25197358 /usr/bin/bash
 bash     24904  root txt    REG  253,0   960472 25197358 /usr/bin/bash
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


3.7 vmstat命令——监控系统资源

如果想动态地了解一下系统资源的使用状况,以及查看当前系统中到底是哪个环节最占用系统资源,就可以使用 vmstat 命令。

vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。

3.7.1 vmstat命令格式一

vmstat [-a] [刷新延时 刷新次数]
 #-a:显示活跃和非活跃内存
复制代码


示例:

[root@localhost ~]# vmstat 3 2       //每3秒刷新一次,共执行2次
 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  2  0      0 1223600   2332 370860    0    0   109     9  207  219  4  6 90  1  0
  2  0      0 1223652   2332 370856    0    0     0     6  276  242  6  7 86  0  0
复制代码


网络异常,图片无法展示
|


查询出的信息共分6段,下面是具体说明:

字段 含义
procs 进程信息字段: -r:等待运行的进程数,数量越大,系统越繁忙。 -b:不可被唤醒的进程数量,数量越大,系统越繁忙。
memory 内存信息字段: -swpd:虚拟内存的使用情况,单位为 KB。 -free:空闲的内存容量,单位为 KB。 -buff:缓冲的内存容量,单位为 KB。 -cache:缓存的内存容量,单位为 KB。
swap 交换分区信息字段: -si:从磁盘中交换到内存中数据的数量,单位为 KB。 -so:从内存中交换到磁盘中数据的数量,单位为 KB。 这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
io 磁盘读/写信息字段: -bi:从块设备中读入的数据的总量,单位是块。 -bo:写到块设备的数据的总量,单位是块。这两个数越大,代表系统的 I/O 越繁忙。
system 系统信息字段: -in:每秒被中断的进程次数。 -cs:每秒进行的事件切换次数。 这两个数越大,代表系统与接口设备的通信越繁忙。
cpu CPU信息字段: -us:非内核进程消耗 CPU 运算时间的百分比。 -sy:内核进程消耗 CPU 运算时间的百分比。 -id:空闲 CPU 的百分比。 -wa:等待 I/O 所消耗的 CPU 百分比。 -st:被虚拟机所盗用的 CPU 百分比


通过分析 vmstat 命令的执行结果,可以获得一些与当前 Linux 运行性能相关的信息。比如说:

  • r 列表示运行和等待 CPU 时间片的进程数,如果这个值长期大于系统 CPU 的个数,就说明 CPU 不足,需要增加 CPU。
  • swpd 列表示切换到内存交换区的内存数量(以 kB 为单位)。如果 swpd 的值不为 0,或者比较大,而且 si、so 的值长期为 0,那么这种情况下一般不用担心,不用影响系统性能。
  • cache 列表示缓存的内存数量,一般作为文件系统缓存,频繁访问的文件都会被缓存。如果缓存值较大,就说明缓存的文件数较多,如果此时 I/O 中 bi 比较小,就表明文件系统效率比较好。
  • 一般情况下,si(数据由硬盘调入内存)、so(数据由内存调入硬盘) 的值都为 0,如果 si、so 的值长期不为 0,则表示系统内存不足,需要增加系统内存。
  • 如果 bi+bo 的参考值为 1000 甚至超过 1000,而且 wa 值较大,则表示系统磁盘 I/O 有问题,应该考虑提高磁盘的读写性能。
  • 输出结果中,CPU 项显示了 CPU 的使用状态,其中当 us 列的值较高时,说明用户进程消耗的 CPU 时间多,如果其长期大于 50%,就需要考虑优化程序或算法;sy 列的值较高时,说明内核消耗的 CPU 资源较多。通常情况下,us+sy 的参考值为 80%,如果其值大于 80%,则表明可能存在 CPU 资源不足的情况。

总的来说,vmstat 命令的输出结果中,我们应该重点注意 procs 项中 r 列的值,以及 CPU 项中 us 列、sy 列和 id 列的值。

3.7.2 vmstat命令格式二

vmstat  [选项]... 
复制代码


常用选项:

选项 含义
-f 显示从启动到目前为止,系统复制(fork)的程序数。此信息是从 /proc/stat 中的 processes 字段中取得的。
-s 将从启动到目前为止,由一些事件导致的内存变化情况列表说明。这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。
-S 单位 令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d 列出硬盘有关读写总量的统计表。
-p 分区设备文件名 查看硬盘分区的读写情况。


示例:

1)-f,显示从启动到目前为止,系统共fork(派生)的程序数。

[root@localhost ~]# vmstat -f       //显示从启动到目前为止,系统共派生的程序数
         54540 forks
复制代码


2)-S 单位,令输出的数据按指定单位显示。k/K,以KB为单位;m/M,以MB为单位。

[root@localhost ~]# vmstat -S k        //令输出的内容以KB为单位
 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  2  0      0 1256337   2387 382066    0    0    88     9  217  224  4  6 89  0  0
 [root@localhost ~]# vmstat -S m        //令输出的内容以MB为单位
 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  2  0      0   1255      2    382    0    0    87     9  217  224  4  6 89  0  0
复制代码


网络异常,图片无法展示
|


3)-d,列出硬盘有关读写总量的统计表。

[root@localhost ~]# vmstat -d
 disk- ------------reads------------ ------------writes----------- -----IO------
        total merged sectors      ms  total merged sectors      ms    cur    sec
 sda     9849     23  738172  136120   4940    155   72326    6248      0     62
 sdb      739      0   19241    7312      8      0    8192    1973      0      4
 sdc      400      0    8025    2046      4      0    4096    1374      0      2
 sr0       18      0    2056     461      0      0       0       0      0      0
 dm-0    9342      0  668005  132045   5091      0   68230    4148      0     61
 dm-1      94      0    4456      29      0      0       0       0      0      0
 dm-2     145      0    2433    1912      4      0    4096    1374      0      2
复制代码


网络异常,图片无法展示
|


4) -s,显示内存相关统计信息及多种系统活动数量。

[root@localhost ~]# vmstat -s
       1867024 K total memory
        302616 K used memory
        245500 K active memory
        250252 K inactive memory
       1149732 K free memory
          2332 K buffer memory
        412344 K swap cache
       4194300 K total swap
             0 K used swap
       4194300 K free swap
         19190 non-nice user cpu ticks
            41 nice user cpu ticks
         28128 system cpu ticks
        388810 idle cpu ticks
          1790 IO-wait cpu ticks
             0 IRQ cpu ticks
           341 softirq cpu ticks
             0 stolen cpu ticks
        383747 pages paged in
         44308 pages paged out
             0 pages swapped in
             0 pages swapped out
        982034 interrupts
       1003112 CPU context switches
    1646377828 boot time
         73210 forks
复制代码


5)-p 分区设备文件名,查看硬盘分区的读写情况。

[root@localhost ~]# vmstat -p /dev/sdb1      //查看/dev/sdb1的读写情况
 sdb1          reads   read sectors  writes    requested writes
                  312       5249          4       4096
复制代码


网络异常,图片无法展示
|




4 启动进程


4.1 手工启动

  • 前台启动:用户输入命令,直接执行程序。
  • 后台启动:在命令行尾加入“&”符号。

使用sleep命令来观察前台启动与后台启动的区别。

1)"sleep 600"让系统睡眠600秒,在前台运行。

那么进程会占用终端,在进程结束前无法执行其他命令。必须等待进程结束。

网络异常,图片无法展示
|


2)"sleep 700 &"让系统睡眠700秒,在后台运行。可以看到后台任务序号和PID。

进程不会占用终端,终端可以正常执行其他命令。使用ps命令可以查询到该进程。

网络异常,图片无法展示
|


4.2 调度启动

  • 使用at命令,设置一次性计划任务。
  • 使用crontab命令,设置周期性计划任务。

调度启动在下文 ” 8 计划任务管理 “ 中详细介绍。


5 进程的前后台调度(作业控制)


命令介绍:

&                 //在命令行尾加入“&”符号,把命令放到后台执行。
 Ctrl+Z 组合键     //将当前进程挂起,即调入后台并停止执行。
 jobs             //查看处于后台的任务列表。
 fg 任务序号       //将后台进程恢复到前台运行,可指定任务序号。
 bg 任务序号       //将一个在后台暂停的任务,变成继续执行。
复制代码


示例:

1)在命令行尾加入“&”符号,输出的信息包括后台任务序号和PID号。

[root@localhost data]# sleep 700 &      //将进程放到后台运行
 [1] 73216
复制代码


网络异常,图片无法展示
|


2)Ctrl+Z 组合,可以将当前进程挂起(即调入后台并停止执行)。

[root@localhost ~]# dd if=/dev/zero of=/tmp/test/bigfile bs=1G count=20
 ^Z
 [1]+  已停止               dd if=/dev/zero of=/tmp/test/bigfile bs=1G count=20
复制代码


网络异常,图片无法展示
|


3)jobs 命令,查看处于后台的任务列表。

[root@localhost ~]# jobs       //查看后台任务列表
 [1]+  已停止               dd if=/dev/zero of=/tmp/test/bigfile bs=1G count=20
复制代码


网络异常,图片无法展示
|


4)fg 任务序号,将后台进程恢复到前台运行。

[root@localhost ~]# jobs
 [1]+  已停止               dd if=/dev/zero of=/tmp/test/bigfile bs=1G count=20
 [root@localhost ~]# fg 1         //将1号任务恢复到前台运行,运行过程中会占用终端
 dd if=/dev/zero of=/tmp/test/bigfile bs=1G count=20
 dd: warning: partial read (884142080 bytes); suggest iflag=fullblock
 dd: 写入"/tmp/test/bigfile" 出错: 设备上没有空间
 记录了5+1 的读入
 记录了4+1 的写出
 5538648064字节(5.5 GB)已复制,150.624 秒,36.8 MB/秒
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|

相关文章
|
2月前
|
调度 Windows Perl
进程和计划任务管理
进程和计划任务管理
18 0
|
6月前
|
分布式计算 Hadoop
hadoop进程启停管理
hadoop进程启停管理
43 0
|
20天前
|
消息中间件 监控 Linux
Linux进程和计划任务管理
通过这些命令和工具,你可以有效地管理Linux系统中的进程和计划任务,监控系统的运行状态并保持系统的稳定和可靠性。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
104 2
|
2月前
|
存储 Linux 程序员
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
84 0
|
2月前
|
存储 调度
进程的奥德赛:并发世界中的核心概念与动态管理
进程的奥德赛:并发世界中的核心概念与动态管理
38 2
|
7月前
|
监控 Java Shell
Shell命令管理进程
  Linux除了是一种多用户操作系统之外,还是一种多任务系统。多任务意味着可以同时运行多个程序。Linux 提供了相关的工具来列出运行中的进程,监视系统的使用情况以及在必要时停止(或杀死)进程。
|
7月前
|
存储 Linux 虚拟化
Linux6.1中为什么用Radix树替换位图(bitmap)来管理进程pid
在过去的几十年中,Linux内核为了有效地管理进程,采用了位图(bitmap)数据结构来记录和跟踪进程的PID。我们知道Linux支持的最大进程数量为65535个,那么用位图来表示的话只需要16位bit就够了,这大大节约了内存空间,随着系统规模的扩大和复杂性增加,尤其是云计算、容器等新兴虚拟化技术大爆发的时代中,操作系统经常会在短时间内快速创建或者销毁大量进程,在这种场景下位图的全面查找时性能问题就逐渐暴露出来了。为了解决这些问题,Linux内核逐渐采用radix树(radix-tree)来替代位图,对进程PID进行管理,这个替换的思路就是用空间换时间。
|
8月前
|
调度
进程和计划任务管理
进程和计划任务管理
72 0
进程和计划任务管理
|
1天前
|
监控 Linux Shell