Linux 系统进程管理

在 Windows 中主要是使用"任务管理器"来进行进程管理的。目的是:

    1)利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程;

    2)利用"性能"和"用户"标签来判断服务器的健康状态;

    3)在"应用程序"和"进程"标签中强制中止任务和进程;

但是,在使用 Windows 系统的过程中,使用任务管理器,很大程度上是为了强制关闭“未反应”的软件,也就是杀死进程。

Linux 中是使用命令进行进程管理,主要目的都是是一样的,进程管理的作用:

    1) 判断服务器的健康状态

    2)查看系统中所有的进程

    3) 杀死进程

一、进程管理中的有些概念

1、程序(program)

     程序是人使用计算机语言编写的指令和数据的代码集合。用来实现特定目标或解决特定问题,其本身没有任何运行的含义,是一个静态的概念。

2、进程(process)

    进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

    主要包含两点:

      1)进程是一个“执行中的程序”。

      程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。

     2)进程是一个实体,拥有资源。

      每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储属性变量和进程执行期间使用的动态分配的进程的内存地址;堆栈区域存储着活动过程调用的指令和临时变量。

顺便说一下线程:

     线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成,线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

     总结:进程是资源分配的最小单位。线程是程序执行的最小单位。

3、Linux中的进程状态

    R (TASK_RUNNING),可执行状态,只有在该状态的进程才可能在CPU上运行。

    S (TASK_INTERRUPTIBLE),可中断的睡眠状态,处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。

    D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态,与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的,这种进程的特征就是kill -9命令杀不死,而TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。

    T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态,向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态,向进程发送一个SIGCONT信号,可以让其从TASK_STOPPED状态恢复到TASK_RUNNING状态,被跟踪的进程下一个断点,进程在断点处停下来的时候就处于TASK_TRACED状态。

    Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程,进程在退出的过程中,处于TASK_DEAD状态,在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外。于是进程就只剩下task_struct这么个空壳,故称为僵尸。

    之所以保留task_struct,是因为task_struct里面保存了进程的退出码、以及一些统计信息。而其父进程很可能会关心这些信息。

4、父进程和子进程

     某些进程会产生一些新的进程,我们把这些进程称作子进程,而把这个进程本身称作父进程。子进程是依赖父进程而产生的,如果父进程不存在,那么子进程也不存在了。

     每一个子进程都有一个父进程,当进程终止或者结束的时候,都会给父进程发送一个SIGCHLD信号,系统默认是父进程忽略这个信号,如果父进程希望被告知其子进程的这种状态改变,则应该捕获这个信号,捕捉函数一般是wait函数来取得子进程ID和子进程状态。CentOS6.x,系统启动的第一个进行是init,CentOS7.x,系统启动的第一个进行是systemd,其他的所有进程,都是第一个系统进程的后代。

5、Linux后台进程与前台进程的区别:

    前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失

    后台进程::也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;

Linux的大多数服务器就是用守护进程实现的。比如,Web服务器httpd等。

6、缓冲(buffer)和缓存(cache)的区别:

    缓存(cache):是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。

    缓冲(buffer):是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。

二、进程与管理操作

1、查看正在运行的进程 -- ps命令

    ps 命令用于查看系统中所有运行进程的详细信息。

基本格式为:

[root@centos7 ~]# ps aux

#查看系统中所有的进程,使用 BS 操作系统格式

[root@centos7 ~]# ps -le

#查看系统中所有的进程,使用 Linux 标准命令格式

选项:

  • a:显示一个终端的所有进程,除会话引线外;
  • u:显示进程的归属用户及内存的使用情况;
  • x:显示没有控制终端的进程;
  • -l:长格式显示更加详细的信息;
  • -e:显示所有进程;

ps 命令有些与众不同,它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”。

ps 命令有多种不同的使用方法,记住下面几个固定选项即可。

1)"ps aux" 可以查看系统中所有的进程;

[root@centos7 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  1.8  0.1 125708  4188 ?        Ss   21:38   0:01 /usr/lib/systemd/systemd --switched-r
root          2  0.0  0.0      0     0 ?        S    21:38   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    21:38   0:00 [ksoftirqd/0]
root          4  0.0  0.0      0     0 ?        R    21:38   0:00 [kworker/0:0]
root          5  0.0  0.0      0     0 ?        S<   21:38   0:00 [kworker/0:0H]
...
表头含义
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进程状态。常见的状态有以下几种:
  1. -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
  2. -R:该进程正在运行。
  3. -S:该进程处于睡眠状态,可被唤醒。
  4. -T:停止状态,可能是在后台暂停或进程处于除错状态。
  5. -W:内存交互状态(从 2.6 内核开始无效)。
  6. -X:死掉的进程(应该不会出现)。
  7. -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
  8. -<:高优先级(以下状态在 BSD 格式中出现)。
  9. -N:低优先级。
  10. -L:被锁入内存。
  11. -s:包含子进程。
  12. -l:多线程(小写 L)。
  13. -+:位于后台。
START该进程的启动时间。
TIME该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND产生此进程的命令名。

2)"ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;

[root@centos7 ~]# ps -le
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0      1      0  0  80   0 - 31427 ep_pol ?        00:00:01 systemd
1 S     0      2      0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0      3      2  0  80   0 -     0 smpboo ?        00:00:00 ksoftirqd/0
1 S     0      4      2  0  80   0 -     0 worker ?        00:00:00 kworker/0:0
...
表头含义
F进程标志,说明进程的权限,常见的标志有两个:
  • 1:进程可以被复制,但是不能被执行;
  • 4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;
NI进程的优先级,数值越小,该进程越早被执行;
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

 3)"ps -l" 只能看到当前 Shell 产生的进程;

[root@centos7 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   9419   9417  0  80   0 - 28892 do_wai pts/0    00:00:00 bash
0 R     0   9436   9419  0  80   0 - 38309 -      pts/0    00:00:00 ps

2、uptime查看系统负载 -- uptime命令

    uptime命令查看CPU负载工具,和 w 命令有相同的信息的输出

[root@centos7 ~]# uptime 
 21:44:38 up 5 min,  1 user,  load average: 0.00, 0.07, 0.05
[root@centos7 ~]# w
 21:46:40 up 7 min,  1 user,  load average: 0.00, 0.04, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.198.1    21:39    0.00s  0.02s  0.00s w

3、实时监听进程运行状态 -- top命令

    top 命令可以动态地持续监听进程地运行状态,同时,该命令还提供了一个交互界面,进而更清楚地了进程的运行状态。

基本格式为:[root@centos7 ~]# top [选项]

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  • -p 进程PID:仅查看指定 ID 的进程;
  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  • -u 用户名:只监听某个用户的进程;


在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

  • ? 或 h:显示交互模式的帮助;
  • P:按照 CPU 的使用率排序,默认就是此选项;
  • M:按照内存的使用率排序;
  • N:按照 PID 排序;
  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  • r:按照 PID 给某个进程重设优先级(Nice)值;
  • q:退出 top 命令;
  • u/U:指定显示的用户
  • 按空格 :立即刷新。

 top 命令的执行结果

[root@centos7 ~]# top
top - 21:50:38 up 11 min,  1 user,  load average: 0.02, 0.04, 0.05
Tasks: 116 total,   2 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4026384 total,  3773292 free,   115096 used,   137996 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  3700604 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                           
  8766 root      20   0  300936   6492   5124 S   0.3  0.2   0:06.47 vmtoolsd                          
  9440 root      20   0  161996   2236   1568 R   0.3  0.1   0:00.05 top                               
     1 root      20   0  125708   4188   2564 S   0.0  0.1   0:01.65 systemd                           
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd                          
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd
...

top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

第一部分是前五行,

显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;

第一行为任务队列信息,具体内容如下:

内 容说 明
12:26:46系统当前时间
up 1 day, 13:32系统的运行时间.本机己经运行 1 天 13 小时 32 分钟
2 users当前登录了两个用户
load average: 0.00,0.00,0.00系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)

第二行为进程信息,具体内容如下:

 
内 容说 明
Tasks: 95 total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程数
0 stopped正在停止的进程数
0 zombie僵尸进程数。如果不是 0,则需要手工检查僵尸进程

第三行为 CPU 信息,具体内容如下:

内 容说 明
Cpu(s): 0.1 %us用户模式占用的 CPU 百分比
0.1%sy系统模式占用的 CPU 百分比
0.0%ni改变过优先级的用户进程占用的 CPU 百分比
99.7%id空闲 CPU 占用的 CPU 百分比
0.1%wa等待输入/输出的进程占用的 CPU 百分比
0.0%hi硬中断请求服务占用的 CPU 百分比
0.1%si软中断请求服务占用的 CPU 百分比
0.0%stst(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行为物理内存信息,具体内容如下:

内 容说 明
Mem: 625344k total物理内存的总量,单位为KB
571504k used己经使用的物理内存数量
53840k&ee空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存
65800k buffers作为缓冲的内存数量

第五行为交换分区(swap)信息,具体内容如下:

内 容说 明
Swap: 524280k total交换分区(虚拟内存)的总大小
Ok used已经使用的交换分区的大小
524280k free空闲交换分区的大小
409280k cached作为缓存的交换分区的大小

第二部分从第六行开始,

主要显示的是系统中进程的信息;具体内容如下:

  • PID:进程的 ID。
  • USER:该进程所属的用户。
  • PR:优先级,数值越小优先级越高。
  • NI:优先级,数值越小、优先级越高。
  • VIRT:该进程使用的虚拟内存的大小,单位为 KB。
  • RES:该进程使用的物理内存的大小,单位为 KB。
  • SHR:共享内存大小,单位为 KB。
  • S:进程状态。
  • %CPU:该进程占用 CPU 的百分比。
  • %MEM:该进程占用内存的百分比。
  • TIME+:该进程共占用的 CPU 时间。
  • COMMAND:进程的命令名。

4、查看进程树 -- pstree命令

    pstree 命令(display a tree of processes)是以树形结构显示程序和进程之间的关系。

基本格式为:[root@centos7 ~]# pstree [选项] [PID或用户名]

选项含义
-a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
-c不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。
-n根据进程 PID 号来排序输出,默认是以程序名排序输出的。
-p显示进程的 PID。
-u显示进程对应的用户名称。

注意:在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 systemd 进程为根进程。systemd 进程是系统启动的第一个进程,进程的 PID 是 1,也是系统中所有进程的父进程

需要安装:# yum install -y psmisc

[root@centos7 ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─abrt-watch-log
        ├─abrtd
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon
        ├─irqbalance
        ├─login───bash
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}

5、查看进程调用了哪些文件 -- lsof命令

    lsof 命令(list opened files)可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

基本格式为:[root@centos7 ~]# lsof [选项]

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

需要安装:[root@centos7 ~]# yum search lsof

1)-p 进程号:列出指定进程号所打开的文件;

[root@centos7 ~]# lsof -p 9446
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash    9446 root  cwd    DIR    8,3       201 33574977 /root
bash    9446 root  rtd    DIR    8,3       277       64 /
bash    9446 root  txt    REG    8,3    964608 50333180 /usr/bin/bash
bash    9446 root  mem    REG    8,3 106075056 50334139 /usr/lib/locale/locale-archive
...

2)-i :端口:列出符合条件的进程。

[root@centos7 ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    9232 root    3u  IPv4  46194      0t0  TCP *:ssh (LISTEN)
sshd    9232 root    4u  IPv6  46196      0t0  TCP *:ssh (LISTEN)
sshd    9444 root    3u  IPv4  46527      0t0  TCP centos7.6:ssh->192.168.198.1:65231 (ESTABLISHED)

6、终止/关闭进程 -- kill、killall 和 pkill命令

     kill 命令:通过进程号关闭单个进程,不能通过进程名。

     killall和pkill命令:通过进程名字杀死指的进程

1) kill 命令

     kill 命令用来杀死进程的命令,但其实,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

     kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

     kill 命令只是“发送”一个信号,因此,只有当信号被程序成功“捕获”,系统才会执行 kill 命令指定的操作;反之,如果信号被“封锁”或者“忽略”,则 kill 命令将会失效。

基本格式为:[root@centos7 ~]# kill  [信号] 进程号PID

    Linux 定义了几十种不同类型的信号,可以使用 kill -l 命令查看所有信号及其编号,各个信号名称的前缀 SIG可以省略,如SIGTERM 和 TERM 这两种写法都对,常用的几个信号如下:

信号编号信号名含义
0EXIT 程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV 段错误。
15TERM正常结束进程,是 kill 命令的默认信号。
[root@centos7 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

杀死httpd进程(9607):

[root@centos7 ~]# ps aux | grep httpd   
root       9607  0.0  0.1 230408  5168 ?        Ss   14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9608  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9609  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9610  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9611  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9612  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
root       9662  0.0  0.0 112724   984 pts/0    S+   15:06   0:00 grep --color=auto httpd
[root@centos7 ~]# kill -9 9608
[root@centos7 ~]# ps aux | grep httpd
root       9607  0.0  0.1 230408  5168 ?        Ss   14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9609  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9610  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9611  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9612  0.0  0.0 230408  3008 ?        S    14:53   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9663  0.0  0.0 230408  3012 ?        S    15:07   0:00 /usr/sbin/httpd -DFOREGROUND
root       9665  0.0  0.0 112724   988 pts/0    S+   15:07   0:00 grep --color=auto httpd

2)killall 命令

    killall 命令通过程序的进程名来杀死一类进程。

基本格式为:killall [选项]  [信号] 进程名

选项:

  • -i:交互式,询问是否要杀死某个进程;
  • -I:忽略进程名的大小写;
[root@centos7 ~]# systemctl start httpd
[root@centos7 ~]# ps aux | grep httpd  
root       9683  0.3  0.1 230408  5172 ?        Ss   15:11   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9684  0.0  0.0 230408  3012 ?        S    15:11   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9685  0.0  0.0 230408  3012 ?        S    15:11   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9686  0.0  0.0 230408  3012 ?        S    15:11   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9687  0.0  0.0 230408  3012 ?        S    15:11   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9688  0.0  0.0 230408  3012 ?        S    15:11   0:00 /usr/sbin/httpd -DFOREGROUND
root       9690  0.0  0.0 112724   988 pts/0    S+   15:11   0:00 grep --color=auto httpd
[root@centos7 ~]# killall -9 httpd
[root@centos7 ~]# ps aux | grep httpd
root       9698  0.0  0.0 112724   988 pts/0    S+   15:12   0:00 grep --color=auto httpd

3)pkill 命令

    pkill 命令通过程序的进程名来杀死一类进程。

基本格式为:[root@centos7 ~]# pkill  [信号] 进程名

pkill 命令还有一个功能,即按照终端号来踢出用户登录,此时的 pkill 命令的基本格式如下:

[root@centos7 ~]#pkill [-t 终端号] 进程名

[-t 终端号] 选项用于按照终端号踢出用户;

[root@centos7 ~]# ps aux | grep httpd          
root       9733  0.1  0.1 230408  5172 ?        Ss   15:16   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9734  0.0  0.0 230408  3012 ?        S    15:17   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9735  0.0  0.0 230408  3012 ?        S    15:17   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9736  0.0  0.0 230408  3012 ?        S    15:17   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9737  0.0  0.0 230408  3012 ?        S    15:17   0:00 /usr/sbin/httpd -DFOREGROUND
apache     9738  0.0  0.0 230408  3012 ?        S    15:17   0:00 /usr/sbin/httpd -DFOREGROUND
root       9740  0.0  0.0 112724   988 pts/0    S+   15:17   0:00 grep --color=auto httpd
[root@centos7 ~]# pkill -9 httpd
[root@centos7 ~]# ps aux | grep httpd 
root       9751  0.0  0.0 112724   984 pts/0    S+   15:18   0:00 grep --color=auto httpd

关闭CRT连接工具

三、进程的优先级

     Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。当 Linux 内核尝试决定哪些运行中的进程可以访问 CPU 时,其中一个需要考虑的因素就是进程优先级的值,由于进程优先级的存在,进程并不是依次运算的,而是哪个进程的优先级高,哪个进程会在一次运算循环中被更多次地运算。也就是说在同一个调度周期中,优先级高的进程占用的时间长些,而优先级低的进程占用的短些。

     在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice。PRI 代表 Priority,NI 代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。    

     PRI 和 NI 的关系如下:PRI (最终值) = PRI (原始值) + NI

    但是,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

修改 NI 值时注意事项:

  • NI 范围是 -20~19。
  • 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
  • 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
  • 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

1、nice命令修改

    nice 命令可以给要启动的进程赋予 NI 值,但是不能修改已运行进程的 NI 值。

基本格式为:[root@centos7 ~]# nice [-n NI值] 命令

-n NI值:给命令赋予 NI 值,该值的范围为 -20~19;

[root@centos7 ~]# systemctl start httpd
[root@centos7 ~]# ps aux | grep httpd  
root      11483  0.1  0.1 230408  5164 ?        Ss   15:42   0:00 /usr/sbin/httpd -DFOREGROUND
apache    11484  0.0  0.0 230408  3004 ?        S    15:42   0:00 /usr/sbin/httpd -DFOREGROUND
apache    11485  0.0  0.0 230408  3004 ?        S    15:42   0:00 /usr/sbin/httpd -DFOREGROUND
apache    11486  0.0  0.0 230408  3004 ?        S    15:42   0:00 /usr/sbin/httpd -DFOREGROUND
apache    11487  0.0  0.0 230408  3004 ?        S    15:42   0:00 /usr/sbin/httpd -DFOREGROUND
apache    11488  0.0  0.0 230408  3004 ?        S    15:42   0:00 /usr/sbin/httpd -DFOREGROUND
root      11490  0.0  0.0 112724   984 pts/0    S+   15:42   0:00 grep --color=auto httpd
[root@centos7 ~]# systemctl stop httpd

[root@centos7 ~]# nice -n -5 httpd
[root@centos7 ~]# systemctl start httpd
[root@centos7 ~]# ps -le | grep httpd
1 S     0  11542      1  0  75  -5 - 57602 poll_s ?        00:00:00 httpd
5 S    48  11543  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11544  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11545  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11546  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11547  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
[root@centos7 ~]#

2、 renice 命令修改

    renice 命令可以在进程运行时修改其 NI 值,从而调整优先级。

基本格式为:[root@centos7 ~]# renice [NI值] PID

[root@centos7 ~]# renice 10 11542
11542 (进程 ID) 旧优先级为 -5,新优先级为 10
[root@centos7 ~]# ps -le | grep httpd
1 S     0  11542      1  0  90  10 - 57602 poll_s ?        00:00:00 httpd
5 S    48  11543  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11544  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11545  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11546  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd
5 S    48  11547  11542  0  75  -5 - 57602 inet_c ?        00:00:00 httpd

   

    命令显示的信息含义太多,用到了回头查就好

 ends~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值