什么是进程?

什么是程序?

    程序是人使用计算机语言编写的可以实现特定目的或解决特定问题的代码集合。
    使用计算机语言编写
    可以执行
    实现一定功能的代码

进程是正在执行当中的程序(命令),每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
程序被执行时,执行人的权限和属性、以及程序的代码都会被加载入内存,操作系统就会给这个进程分配一个 ID 号,我们称为 PID(进程 ID)。

进程管理的作用

·        判断服务器健康状态:运维工程师最主要的工作就是保证服务器安全稳定的运行。理想的状态是,在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。
·        查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服务运行。
·        杀死进程:这是进程管理中最不常用的手段,当我需要停止服务时,会通过正确关闭命令来停止服务(如 apache 服务可以通过 systemctl stop apache 来关闭)。只有当正常终止进程的手段失效的情况下,才会考虑使用 kill 命令杀死进程(你不是杀手,不要什么进程都用 kill来终止,否则非常容易导致服务器崩溃)。

进程的生命周期

当程序运行的时候会由父进程通过fock(一种分支函数)创建子进程来处理任务;子进程被创建后开始处理任务,当任务处理完毕后就会退出,然后子进程会通知父进程来回收资源;如果子进程处理任务期间,父进程意外终止了,那么这个子进程就变成了僵尸进程。

image-14fc18ca944342268a87e2438ef76260

进程的查看

ps命令

    ps 命令是用来静态显示系统中进程的命令。
        ps命令有些特殊,它的部分命令的选项不能加入“-”,比如命令“ps aux”,其中“aux”是选项,但是这个选项不能加入“-”。这是因为 ps命令的部分选项需要遵守 BSD 操作系统的格式。所以 ps 命令的常用选项的组合是固定的。

    注意: 
    加了 [ ] 的,表示内核进程
    exiting或defunct表示僵尸进程
    [root@localhost~]# ps aux
         #查看系统中所有进程,使用BSD操作系统格式

      [root@localhost~]# ps -le    /常用的选项ps -ef
          #查看系统中所有进程,使用Linux标准命令格式。

ps选项

        1.  a:        显示一个终端的所有进程,除了会话引线
        2.  u:        显示进程的归属用户及内存的使用情况
        3.  x:        显示没有控制终端的进程
        4.   
        5.  -e      //显示所有进程,与-A效果相同
        6.  -l      //以长格式显示
        7.  -F      //显示更详细的完整格式的进程信息
        8.  -f      //显示更详细的完整格式的进程信息
        9.  -H      //以进程层级格式显示进程相关信息
        10. -o      //根据自己的需要选择要显示的字段

    [root@localhost ~]# ps -o pid,comm,ni 
          //表示只显示进程号,命令,nice值三个字段
        1.  PIDCOMMAND           NI
        2.    8828   bash                0
        3.    9844     ps                   0

ps aux输出结果

        [root@localhost~]# ps aux    #查看系统中所有的进程
             USER      PID %CPU %MEM    VSZ  RSS TTY  STAT START  TIME    COMMAND
              root       1  0.0  0.2 2872 1416   ?       Ss Jun04  0:02    /sbin/init
            root       2  0.0  0.0      0         0   ? S  Jun04  0:00    [kthreadd]

                输出         含义      
                 输出         含义       
              USER    	  该进程是由哪个用户产生的;   
              PID    	          进程的 ID 号;
              %CPU    	  该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;   
              %MEM    	  该进程占用物理内存的百分比,占用越高,进程越耗费资源;   
              VSZ    	           该进程占用虚拟内存的大小,单位 KB;
              RSS    	          该进程占用实际物理内存的大小,单位 KB;
              TTY    	          该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端(可以通过alt+F1-F7 键切换不同的终端),tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用的是 pts/0 终端,第二个远程连接占用 pts/1,依次增长;
              STAT    	  进程状态;   
              START    	  该进程的启动时间;   
              TIME    	  该进程占用 CPU 的运算时间,注意不是系统时间;   
              COMMAND    	  产生此进程的命令名;   

                STAT进程状态         状态含义      
                STAT进程状态         状态含义       
          D    	  不可被唤醒的睡眠状态,通常用于 I/O 情况   
          R    	  该进程正在运行   
          S    	  该进程在睡眠状态,可被唤醒   
          T    	  停止状态,可能是在后台暂停或进程在出错状态   
          W    	  内存交互状态(从 2.6 内核开始无效)   
          X    	  死掉的进程(应该不会出现)   
          Z    	  僵尸进程。进程已经终止,但是部分程序还在内存当中。   
          <     	  高优先级(以下状态在 BSD 格式当中出现)   
          N    	  低优先级   
          L    	  被锁入内存   
          s    	  包含子进程   
          l    	  多线程(小写 L)   

    | 位于后台

ps -le输出结果

        [root@localhost~]# ps -le
             FS  UID PID  PPID C PRI NI ADDR   SZ WCHAN TTY        TIME  CMD
            4S         0     1          0 0  80 0    -  718    -       ?        00:00:02   init
             1S         0     2          0 0  80 0    -  0     - ?        00:00:00   kthreadd

                输出         含义      
                    输出         含义       
              F    	  进程标志,说明进程的权限,常见的标志:  1:进程可以复制,但是不能执行  4:进程使用超级用户权限   
              S    	  进程状态。具体的状态和“ps aux”命令中 STAT 状态一致   
              UID    	  进程是哪个 UID 用户调用运行的   
              PID    	  进程的 ID 号   
              PPID    	  父进程的 ID 号   
              C    	  该进程的 CPU 使用率,单位是百分比   
              PRI    	  进程的优先级,数值越小该进程优先级越高,越快被 CPU 执行;动态值由内核决定   
              NI    	  进程的优先级,也是数值越小越早被执行;静态值管理员手动设置,NI值的范围-20到19之间;  调整已经启动的进程的nice值的命令:renice NI  PID  在启动时指定nice值的命令:nice -n 数字 COMMAND   
              ADDR    	  该进程在内存的哪个位置   
              SZ    	  该进程占用多大内存   
              WCHAN    	  该进程是否运行。“-”代表正在运行   
              TTY    	  该进程由哪个终端产生   
              TIME    	  该进程占用 CPU 的运算时间,注意不是系统时间   
              CMD    	  产生此进程的命令名   

pstree命令

    pstree命令将所有进程以树状图显示
        1.  [root@localhost~]# pstree [选项]
        2.  选项:
        3.  -p: 显示进程的 PID
        4.  -u: 显示进程的所属用户
        5.   
        6.  #如果没有pstree命令,使用下面命令安装
        7.  yum-y install psmisc

pidof命令

    根据进程名查找其PID号
        1.  [root@localhost~]# pidof sshd
            2.  88261105

        3.  [root@localhost~]# pidof atd
            4.  1387

top命令

    top命令是Linux下常用的性能分析工具
        top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
        top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,直到用户终止该程序为止,比较准确的说,top命令提供了实时的对系统处理器的状态监视;它将显示系统中CPU最“敏感”的任务列表,该命令可以按CPU使用情况,内存使用情况和执行时间对任务进行排序。

    [root@localhost~]# top [选项]
        1.  选项:
        2.  -d秒数:  指定 top 命令每隔几秒更新。默认是 3秒
        3.  -n次数:指定 top 命令执行的次数。一般和“-b”选项合用
        4.  -b使用批处理模式输出。一般和“-n”选项合用,用于把top 命令重定向到文件中
        5.  -p指定PID。只查看某个 PID 的进程
        6.  -s使top 在安全模式运行,避免在交互模式中出现错误
        7.  -u用户名:只监听某个用户的进程

    在 top 命令的交互模式当中可以执行的命令:
        1.  ?或 h:   显示交互模式的帮助
        2.  P:以 CPU 使用率排序,默认就是此项
        3.  M:以内存的使用率排序
        4.  N:以 PID 排序
        5.  T:按照 CPU 的累积运算时间排序,也就是用TIME+项排序
        6.  k:按照 PID 号,给予某个进程一个信号。一般用于终止某个进程,信号 9是强制终止的信号
        7.  r:按照 PID 号,给某个进程重设优先级(Nice)值
        8.  q:退出 top

    top输出结果
         [root@localhost~]# top
            1.  top- 13:44:21 up 4 days, 16:01,  2users,  load average: 0.00, 0.01, 0.05
            2.  Tasks:  84 total,  1 running,  83 sleeping,   0 stopped,  0 zombie
            3.  %Cpu(s):  2.0 us, 2.0 sy,  0.0 ni, 96.0 id,  0.0 wa, 0.0 hi,  0.0 si,  0.0 st
            4.  KiBMem :  1883724 total,   144992 free,   948956 used,   789776 buff/cache
            5.  KiBSwap:  2097148 total,  2097148 free,        0 used. 1539352 avail Mem
            6.   
            7.    PID USER     PR  NI    VIRT   RES    SHR S %CPU %MEM     TIME+ COMMAND        
            8.   1119 root     10 -10  146420  29512  5956 S  1.3  1.6 71:48.53 AliYunDun      
            9.   1317 root     20   0 2070408  62124  3296 S  0.3  3.3 28:04.11 java
            命令的输出,top 命令的输出内容是动态的,默认每 3 秒刷新一次。命令的输出主要分为两大部分:第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出判断服务器的健康状态;第二部分从第六行开始,显示的是系统中进程的信息。

top 命令的第一部分输出

        第一行为任务队列信息
             top - 13:44:21 up 4 days, 16:01,  2 users,  load average: 0.00, 0.01, 0.05
                        输出         含义       
                  13:44:21    	  系统当前时间   
                  up 4 days, 16:01    	  系统的运行时间,本机已经运行 4 天 16 小时 1 分钟   
                  2 users    	  当前登录了两个用户   
                  load average: 0.00, 0.01, 0.05    	  系统在之前 1 分钟,5 分钟,15 分钟的平均负载。  如果 CPU 是单核,则这个数超过 1,就是高负载。  如果 CPU 是四核,则这个数超过 4,就是高负载。  (这个平均负载完全是个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数。)   


        第二行为进程信息:
            Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
                        输出         含义       
                  84 total    	  系统中的进程总数   
                  1 running    	  正在运行的进程数   
                  83 sleeping    	  睡眠的进程   
                  0 stopped    	  正在停止的进程   
                  0 zombie    	  僵尸进程。如果不是 0,需要手工检查僵尸进程   


        第三行为 CPU 信息:
              %Cpu(s):  2.0 us, 2.0 sy, 0.0 ni, 96.0id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
                        输出         含义       
                  2.0 us    	  用户模式占用的 CPU 百分比   
                  2.0 sy    	  系统模式占用的 CPU 百分比   
                  0.0 ni    	  改变过优先级的用户进程占用的 CPU 百分比   
                  96.0 id    	  空闲 CPU 的  CPU 百分比   
                  0.0 wa    	  等待输入/输出的进程的占用 CPU 百分比   
                  0.0 hi    	  硬中断请求服务占用的 CPU 百分比   
                  0.0 si    	  软中断请求服务占用的 CPU 百分比   
                  0.0 st    	  st(Steal time)虚拟时间百分比。就是当有虚拟机时,  虚拟 CPU 等待实际 CPU 的时间百分比   


        第四行为物理内存信息:
              KiB Mem :  1883724 total,   144992 free,   948956 used,   789776 buff/cache
                        输出         含义       
                  1883724 total    	  物理内存的总量,单位 KB   
                  144992 free    	  空闲的物理内存数量,我们使用的是虚拟机,  总共分配了 2G 内存,所以只有 0.14G 的空闲内存了   
                  948956 used    	  已经使用的物理内存数量   
                  789776 buff/cache    	  作为缓冲的内存数量   


        第五行为交换分区(swap)信息
             KiB Swap:  2097148 total,  2097148 free,        0 used.  1539352 avail Mem
                        输出         含义       
                  2097148 total    	  交换分区(虚拟内存)的总大小   
                  2097148 free    	  空闲交换分区的大小   
                  0 used    	  已经使用的交互分区的大小   
                  1539352 avail Mem    	  可用交换分区总量   

top 命令的第二部分输出

        1.  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND        
            2.   1119 root      10 -10  146420  29512   5956 S  1.3  1.6  71:48.53 AliYunDun      
            3.   1317 root      20   0 2070408  62124   3296 S  0.3  3.3  28:04.11 java
            主要是系统进程信息。这部分和 ps 命令的输出比较类似,只是如果在终端中执行 top 命令不能看到所有的进程,而只能看到占比靠前的进程。
                        输出         含义       
                  PID    	  进程 ID   
                  USER    	  该进程所属的用户   
                  PR    	  优先级,数值越小优先级越高   
                  NI    	  优先级,数值越小优先级越高   
                  VIRT    	  该进程使用的虚拟内存的大小,单位 KB   
                  RES    	  该进程使用的物理内存的大小,单位 KB   
                  SHR    	  共享内存大小,单位 KB   
                  S    	  进程状态   
                  %CPU    	  该进程占用 CPU 的百分比   
                  %MEM    	  该进程占用内存的百分比   
                  TIME+    	  该进程总共占用的 CPU 时间   
                  COMMAND    	  进程的命令名   

top使用实例

         #top 命令常用的实例。
            1.  #top 命令常用的实例。
            2.  比如我如果只想让 top 命令查看某一个进程,这时就可以使用“-p选项”:
            4.  [root@localhost~]# top -p 15273    #只查看 PID 为 15273 的 apache 进程
            6.  在 top 命令的交互界面中按“q”键会退出 top 命令。
            按“?”或“h”得到 top 命令交互界面的帮助信息
            按“k”键终止某个进程,命令如下
                [root@localhost~]# top
                    1.  top- 13:20:05 up  3:32,  3 users, load average: 0.00, 0.01, 0.05
                    2.  Tasks:157 total,   2 running, 155 sleeping,   0 stopped,  0 zombie
                    3.  %Cpu(s):  1.3 us, 2.3 sy,  0.0 ni, 96.3 id,  0.0 wa, 0.0 hi,  0.0 si,  0.0 st
                    4.  KiBMem :  1867024 total,  1269720 free,   148216 used,   449088 buff/cache
                    5.  KiBSwap:  2097148 total,  2097148 free,        0 used. 1513848 avail Mem 
                    6.  PIDto kill:15273    按“k”键,会提示输入要杀死进程的PID

                1.  如果在操作终端执行 top 命令,并不能看到系统中所有的进程,默认看到的只是CPU 占比靠前的
                2.  进程。如果我们想要看到所有的进程可以把 top 命令的结果重定向到文件当中即可。不过top 命令是
                持续运行的,这时就需要“-b”和“-n”选项了,具体命令如下:
                     [root@localhost~]# top -n 1 -b > /root/top.log
                          #让 top 命令只执行一次,然后把结果保存到 top.log 文件中。这样就能看到所有的进程了

vmstat命令

    vmstat 命令监控系统资源。
          vmstat刷新延时 刷新次数
            [root@hzz~]# vmstat 1 3
                1.  [root@hzz~]# vmstat 1 3
                2.  #使用 vmstat 检测,每 1 秒刷新一次,共刷新 3 次
                3.  procs    ---------memory----------  --swap--  ----io---  -system- ------cpu-----
                4.   r b    swpd   free  buff  cache   si  so    bi    bo  in   cs us sy id wa st
                5.   2 0      0 1404464   2788 314388    0   0    10     5 213  209  3  592  0 0
                6.   0 0      0 1404104   2788 314420    0   0     0     0 209  199  3  493  0 0
                7.   0 0      0 1403936   2788 314468    0   0     0     0 328  259  6 11 83 0  0



    procs:进程信息字段:
                字段         含义       
          r    	  等待运行的进程数,数量越大,系统越繁忙。   
          b    	  阻塞队列长度,也即不可被唤醒的进程数量,数量越大,系统越繁忙。   

    memory:内存信息字段:
                字段         含义       
          swpd    	  虚拟内存的使用情况,单位 KB。   
          free    	  空闲的内存容量,单位 KB。   
          buff    	  buffer缓冲的内存容量,单位 KB。   
          cache    	  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 占比。   

进程管理

 发送信号管理进程
    Linux系统中使用发送信号的方式来管理进程,系统可以识别的信号较多,我们可以使用命令“kill -l“来查询。
    kill命令可以发送信号来管理进程。
          [root@hzz~]# kill -l
            1.  1)SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
            2.   6) SIGABRT     7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
            3.  11)SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
            4.  16)SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
            5.  21)SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
            6.  26)SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
            7.  31)SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
            8.  38)SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
            9.  43)SIGRTMIN+9  44) SIGRTMIN+10 45)SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
            10. 48)SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
            11. 53)SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8  57) SIGRTMAX-7
            12. 58)SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
            13. 63)SIGRTMAX-1  64) SIGRTMAX
            主要的信号
                        信号代号         信号名称         含义       
                         1           	  SIGHUP    	  该信号让进程立即关闭,然后重新读取配置文件之后重启   
                  2    	  SIGINT    	  程序终止信号,用于终止前台进程。相当于输出 ctrl+c 快捷键   
                  9    	  SIGKILL    	  用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。一般用于强制终止进程   
                  15    	  SIGTERM    	  正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL 信号,也就是信号 9   
                  18    	  SIGCONT    	  该信号可以让暂停的进程恢复执行。本信号不能被阻断   
                  19    	  SIGSTOP    	  该信号可以暂停前台进程,相当于输入 ctrl+z 快捷键。本信号不能被阻断   


          信号代号         信号名称         含义       
                     1           	  SIGHUP    	  该信号让进程立即关闭,然后重新读取配置文件之后重启   
              2    	  SIGINT    	  程序终止信号,用于终止前台进程。相当于输出 ctrl+c 快捷键   
              9    	  SIGKILL    	  用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。一般用于强制终止进程   
              15    	  SIGTERM    	  正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL 信号,也就是信号 9   
              18    	  SIGCONT    	  该信号可以让暂停的进程恢复执行。本信号不能被阻断   
              19    	  SIGSTOP    	  该信号可以暂停前台进程,相当于输入 ctrl+z 快捷键。本信号不能被阻断   

kill命令

    使用信号管理进程。
        1.  #kill命令用法:
            2.  kill[-信号] PID

        4.  #使用kill -1 信号让PID为2246的进程重启。
            5.  [root@localhost~]# kill -1 2246

        7.  #使用kill -19 信号,让vim进程暂停。
            8.  [root@localhost~]# vi test.sh

        10. #换一个不同的终端,查看下这个这个进程的状态。进程状态是 S(休眠)和+(位于后台),因为是在另外一个终端运行的命令所以显示后台。
            11. [root@localhost~]# ps aux | grep "vi" | grep -v "grep"
            12. root2313 0.0 0.2 7116 1544 pts/1 S+ 19:20 0:00 vi test.sh

        14. #使用-19 信号,让 PID 是 2313 的进程暂停。相当于在 vi 界面按“ctrl+z”快捷键。
            15. [root@localhost~]# kill -19 2313

        17. #注意 2313 进程的状态,变成了 T(暂停)状态。这时我切换回 vi 的终端,发现 vi 命令已经暂停,又回到了命令提示符。
            18. [root@localhost~]# ps aux | grep "vi" | grep -v "grep"
            19. root2313 0.0 0.2 7116 1580 pts/1 T 19:20 0:00 vi test.sh

        21. #不过 2313 进程就会卡在后台,可以使用“kill -9 2313”强制终止进程.

killall命令

    killall后面加进程名,表示将匹配到的以进程名为名的进程全部杀死。
    1.  [root@localhost~]# killall [选项][信号] 进程名
        3.  选项:
            4.  -i: 交互式,询问是否要杀死某个进程
            5.  -I: 忽略进程名的大小写


    7.  #杀死进程名为sleep的所有进程
        8.  [root@localhost~]# ps -ef|grep sleep
        9.  root1914 1272 0 19:58 pts/0 00:00:00 sleep 1000
        10. root1915 1272 0 19:58 pts/0 00:00:00 sleep 500
        11. root1916 1272 0 19:58 pts/0 00:00:00 sleep 700
        12. root1920 1272 0 19:58 pts/0 00:00:00 grep --color=auto sleep

    13. [root@localhost~]# killall sleep
        14. [1]Terminated sleep 1000
        15. [2]-Terminated sleep 500
        16. [3]+Terminated sleep 700

    17. [root@localhost~]# ps -ef|grep sleep
        18. root1923 1272 0 19:58 pts/0 00:00:00 grep --color=auto sleep

工作管理

前台进程:
    前台进程:是指当前正在使用的程序,用户可以进行操作;会占用当前的终端命令行界面。

后台进程:
    后台进程:是指由计算机自动控制,可以自行运行的程序;用户只能关闭和开启后台进程。

 & 命令
    使用& 符号
        在命令的最后使用 & 符号可以将命令(程序)放入后台执行,执行完毕之后会显示结果; & 符号与前面的命令(程序)必须要用空格隔开。
        注意:
        放入后台执行的命令(程序)不能与前台有交互,否则这个命令(程序)是不能在后台执行的。
        当用户断开终端后,& 放入后台运行的命令(程序)就会终止。
        ctrl+z 也可将命令(程序)放入后台,但是 ctrl+z 放入后台的命令(程序)处于暂停状态。

    1.  [root@localhost~]# sleep 5s &
        2.  [1]1819
        5.  [1]-  完成                  sleep 5s
        7.  [1]    方括号括起来的为工作号也叫作业号
        8.  1819   为进程号(PID)

    10. #工作号(作业号)是用户主动将进程放入后台之后产生的,一般用"[数字]"形式表示。
    11. #工作号(作业号)的作用是方便用户管理后台运行的程序。

jobs命令

    jobs命令可以查看放入后台执行的命令(程序)。只能看到用户主动放入后台执行的命令(程序)。
    1.  jobs
        2.  选项:
        3.      -l 显示后台工作的命令(程序)的PID

    5.  [root@hzz~]# sleep 500s &
        6.  [1]105906

    7.  [root@hzz~]# sleep 100s &
        8.  [2]105961

    9.  [root@hzz~]# sleep 300s &
        10. [3]106030

    11. [root@hzz~]# jobs
        12. [1]   运行中               sleep 500s &
        13. [2]-  运行中               sleep 100s &
        14. [3]+  运行中               sleep 300s &

    15. [root@hzz~]# jobs -l
        16. [1]-105906 运行中               sleep 500s &
        17. [3]+106030 运行中               sleep 300s &

fg命令

    fg命令可以将后台的工作恢复到前台运行。
    1.  fg%工作号
        2.  参数:
        3.  %工作号          %号可以省略,但是注意工作号和 PID 的区别。

    5.  [root@hzz~]# sleep 500s &
        6.  [1]117170

    7.  [root@hzz~]# fg %1
        8.  sleep500s

bg命令

    bg命令可以恢复后台暂停的工作,让其在后台继续运行。
    1.  bg%工作号
        2.  参数:
        3.  %工作号          %号可以省略,但是注意工作号和 PID 的区别。

    5.  [root@hzz~]# sleep 500s
        6.  ^Z
        7.  [1]+  已停止               sleep 500s

    8.  [root@hzz~]# bg %1
        9.  [1]+sleep 500s &

    10. [root@hzz~]# jobs
        11. [1]+  运行中               sleep 500s &

nohup命令

    nohup 命令的作用
        nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确的在后台执行;和 &一起使用。
        注意:使用nuhup命令放入后台运行的命令(程序)一但断开终端,用 jobs 命令就查看不到,需要用 ps 或 top 命令查看。

     nohup命令 &
     #nohup 和 & 中间加上命令,表示将命令放入后台运行,断开终端也不会终止。
      [root@hzz~]# nohup sleep 500s &
       [1]46544

        [root@hzz~]# nohup: 忽略输入并把输出追加到"nohup.out"
         [root@hzz~]# ps -ef | grep "sleep 500s" | grep -v "color"
         root      46544 35267  0 19:15 pts/0    00:00:00 sleep 500s

如何查看cpu核心数

配置文件/proc/cpuinfo 存放着cpu信息,查询结果有几行,cpu就有几核。
[root@134 ~]#  grep 'model name' /proc/cpuinfo
model name      : 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz
model name      : 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz