28张图,一万字,轻松搞懂Linux系统进程管理!
老男孩IT教育
行业新闻
2023年4月10日 17:06
对于进程管理知识的学习,可以帮助运维人员在不熟悉开发知识时,也可以排查是哪个服务程序影响了系统资源;可以帮助运维人员更好的监控系统的资源情况,并根据一些程序异常作出合理的思路判断。简单来说:当系统资源应用出现异常,运维人员可以从服务进程入手解决问题。
对于进程管理知识的学习,可以帮助运维人员在不熟悉开发知识时,也可以排查是哪个服务程序影响了系统资源;
可以帮助运维人员更好的监控系统的资源情况,并根据一些程序异常作出合理的思路判断。
简单来说:当系统资源应用出现异常,运维人员可以从服务进程入手解决问题。
系统进程基本概述
进程概念介绍说明
一般将开发编写的好代码称为是程序,当开发好的代码运行起来后,就可以称运行起来的代码为系统的进程。
简单来说:当运行一个程序时,可以将运行的程序称为进程;(系统需要处理任务)
当程序运行起来成为进程后,系统会为该进程分配内存存储空间,以及分配进程运行的用户身份和权限;
当程序运行起来成为进程时,系统会有各种指标来表示当前运行的状态
进程程序之间区别
程序是数据和执行集合,是一个静态的概念,比如系统中常见的二进制文件,同时程序可以长期存在系统中;
进程是程序运行的过程,是一个动态的概念,进程是存在生命周期的概念的,会随着程序的终止而销毁;
进程运行生命周期
生命周期就是指一个对象的生老病死的过程:
参考资料:
https://www.cnblogs.com/wannable/p/6021617.html
https://blog.51cto.com/u_12027605/1853917
当父进程接收到任务调度时,会通过fork派生子进程来处理,所以子进程会继承父进程属性:
1、子进程在处理任务代码时,父进程其实不会进入等待,其运行过程是由linux系统进行调度的;
2、子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源;
3、子进程在处理任务代码中,如果出现异常退出,而父进程没有回收子进程资源,会导致子进程运行实体消失
4、但仍然在内核的进程表中占据一条记录,长期下去对于系统资源是一种浪费;(僵尸进程)
5、子进程在处理任务代码中,父进程退出了,子进程没有退出,那么子进程就没有父进程来管理了;
6、有系统的system进程管理;(孤儿进程)
说明:每个进程都有父进程(PPID),对应的子进程为(PID)
进行信息查看:
[root@xiaoq ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:34 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system
root 2 0 0 12:34 ? 00:00:00 [kthreadd]
root 4 2 0 12:34 ? 00:00:00 [kworker/0:0H]
root 5 2 0 12:34 ? 00:00:01 [kworker/u256:0]
-- pid为子进程编号,ppid为父进程编号
系统进程状态监控
查看当前进程状态
程序在运行后,需要了解进程的运行状态,查看进程的状态分为两种方式:
静态进程状态查看:只查看某一时间段的进程运行情况
动态进程状态查看:实时监控进程信息占用资源的情况
01 查看当前静态进程状态
ps命令是“process status”的缩写,ps命令用于显示当前某一时刻系统的进程状态。
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程:
- 正在运行和运行的状态
- 进程是否结束
- 进程有没有僵死
- 哪些进程占用了过多的资源等等
总之大部分信息都是可以通过执行该命令得到的。可以搭配kill指令随时中断、删除不必要的程序。
语法格式:ps [参数]
参数信息:系统中出现的进程信息会有两类:用户操作运行的进程/系统运行产生的进程
说明:以上参数在企业中经常采用组合方式使用:ps -ef(信息更简洁)/ps -aux(包含资源占用情况)
实践操作:
实践操作情况-01:查看进程信息、用户信息、pid编号、占用cpu百分比、占用内存宝百分比、状态、执行命令等;
对比windows系统进程情况:
[root@xiaoq ~]# ps -aux
-- 常见命令参数组合 -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 12:34 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 12:34 0:00 [kworker/0:0H]
root 5 0.0 0.0 0 0 ? S 12:34 0:01 [kworker/u256:0]
...省略部分信息...
输出列信息说明:
进程状态信息详述:
说明:一般常见的进程状态有:R+R S D T Ss S< SsI;可以通过man ps获取详细说明;
进程状态信息详述:
参考链接资料:https://blog.csdn.net/nilxin/article/details/7437671
R(running or runnable):运行状态或可运行状态
只有在该状态的进程才可能在CPU上运行,而同一时刻可能有多个进程处于可执行状态;
将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态;
这两种状态在linux下统一为TASK_RUNNING状态。
进程状态模拟:
[root@xiaoq ~]# ps -aux|grep ps
root 2133 0.0 0.1 51756 1720 pts/0 R+ 21:36 0:00 ps -aux
S(interruptible sleep):可中断的睡眠状态
处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。
当某些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。
一般情况下,进程列表中的绝大多数进程都处于task_interruptible状态(除非机器的负载很高)。
毕竟CPU就这么一两个,进程动辄几十上百个,如果不是绝大多数进程都在睡眠,CPU又怎么响应得过来。
总结:出现挂起状态的情况:
某些进程在队列中等待CPU的唤醒;
某些进程已经被CPU处理完成后;
进程状态模拟:
[root@xiaoq ~]# ps -aux|grep bash
root 1846 0.0 0.3 116600 3164 pts/1 Ss 16:27 0:00 -bash
root 2074 0.0 0.2 116468 2952 pts/0 Ss+ 21:27 0:00 -bash
-- 均可被中断或挂起的父进程
T(stopped):暂停状态或跟踪状
当进程正在被跟踪时处于暂停状态;正在被跟踪指的是进程暂停下来,等待跟踪它的进程对它进行操作。
处于task_traced状态的进程不能响应sigcont信号而被唤醒;只能通过ptrace系统调用执行;
或调试进程退出,被调试的进程才能恢复task_running状态。
当某个程序运行后的进程持续不断占用CPU资源时,可以临时先暂停进程运行,程序服务修复后,可以在恢复进程。
进程状态模拟:
[root@xiaoq ~]# vim /etc/hosts
[1]+ Stopped vim /etc/hosts
-- 编写文件过程中,按下ctrl+z快捷键,显示进程被停止
[root@xiaoq ~]# ps -aux|grep vim
root 2070 0.1 0.5 45840 5220 pts/1 T 21:23 0:00 vim /etc/hosts
-- 表示vim执行编写文件信息任务的进程处于被暂停的状态
D(uninterruptible sleep):不可中断的睡眠状态
与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的;
不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号;
简单理解就是,kill -9竟然杀不死一个正在睡眠的进程了;
TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的;
进程状态模拟:
# 在一个会话窗口进行数据压缩打包
[root@xiaoq ~]# tar zcf /opt/data.tar.gz /etc /var /tmp /root
# 在另一个会话窗口进行压缩任务进程信息查看
[root@xiaoq ~]# ps -aux|grep tar|grep -v grep
root 2103 61.3 0.1 20212 1460 pts/1 D+ 21:27 0:01 tar zcf /opt/data.tar.gz /etc /var /tmp /root
-- 此时对磁盘进行写入操作的进程是不能被打断的
Z(zombie process):僵尸进程状态
进程在退出的过程中,进程占有的所有资源将被回收,但当子进程资源还没有回收时,子进程就死掉了;
比如在shell中,$?变量就保存了最后一个退出的前台进程的退出码,而这个退出码往往被作为if语句的判断条件
只要父进程不退出,这个僵尸状态的子进程就一直存在。
进程状态模拟:编写测试僵尸进程的代码文件,并生成可执行文件
# 模拟实现僵尸进程脚本信息
[root@xiaoq ~]# cat test_zombie.c
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
if(pid == -1)
perror("create faild");
if(pid == 0)//孩子进程
{
sleep(3);
printf("pid process dead\n");
}
else if(pid >0)//父进程信息
{
int times = 10;
while(times--)
{
printf("ppid process: %d\n",times);
sleep(1);
}
printf("ppid process dead\n");
}
return 0;
}
# 生成可执行文件信息
[root@xiaoq ~]# gcc test_zombie.c -o test_zombie
执行测试代码执行文件:
[root@xiaoq ~]# ./test_zombie
ppid process: 9 ---
ppid process: 8 --- 第一个阶段:父进程和子进程都存在时,进程正常运行阶段
ppid process: 7 ---
pid process dead --- 第二个阶段:子进程消失,父进程继续运行
ppid process: 6
ppid process: 5
ppid process: 4
ppid process: 3
ppid process: 2
ppid process: 1
ppid process: 0
ppid process dead --- 第三个阶段:父进程消失,默认自动回收子进程产生的讲师进程
# 以上代码信息执行过程分为三个阶段,利用这个三个阶段可以获取不同的进程状态信息
执行测试代码进程状态信息变化:
# 第一个阶段:父进程和子进程都存在时
[root@xiaoq ~]# ps -aux|grep test_zombie
root 11126 3.0 0.0 4216 352 pts/7 S<+ 19:40 0:00 ./test_zombie
root 11127 0.0 0.0 4212 88 pts/7 S<+ 19:40 0:00 ./test_zombie
[root@xiaoq ~]# ps -ef|grep test_zombie
root 11126 10286 0 19:41 pts/7 00:00:00 ./test_zombie
root 11127 11126 0 19:41 pts/7 00:00:00 ./test_zombie
# 第二个阶段:父进程正常,子进程异常,出现僵尸进程阶段
[root@xiaoq ~]# ps -aux|grep test_zombie
root 11126 1.0 0.0 4216 352 pts/7 S<+ 19:40 0:00 ./test_zombie
root 11127 0.0 0.0 0 0 pts/7 Z<+ 19:40 0:00 [test_zombie] <defunct>
[root@xiaoq ~]# ps -ef|grep test_zombie
root 11126 10286 0 19:41 pts/7 00:00:00 ./test_zombie
root 11127 11126 0 19:41 pts/7 00:00:00 [test_zombie] <defunct>
# 第三个阶段:父进程中止,默认自动回收僵尸进程
[root@xiaoq ~]# ps -aux|grep test_zombie
[root@xiaoq ~]# ps -ef|grep test_zombie
僵尸进程一旦出现,或造成系统资源浪费,因此需要进行处理:
通过程序代码可以自动回收僵尸进程(开发处理)
通过终止服务程序主进程,让僵尸进程自动变为孤儿进程,随之被系统systemd主进程回收(运维处理)
当服务程序主进程停止后,僵尸进程并没有变为孤儿进程,仍旧存在僵尸进程,可以使用重启操作(服务/系统)
参考链接资料:https://blog.csdn.net/xiaozuo666/article/details/79833527
Linux系统中pstree命令的英文全称是“process tree”,即将所有行程以树状图显示;
树状图将会以 pid (如果有指定) 或是以systemd这个基本行程为根 (root),如果有指定使用者 id;
则树状图会只显示该使用者所拥有的行程。
# centos7 系统中默认没有pstree命令,需要先进行安装
[root@k8s-node-01 ~]# yum install -y psmisc
语法格式:pstree [参数]
参数信息:
实践操作情况-01:显示启动的进程详细信息
[root@xiaoQ ~]# pstree -a
systemd --switched-root --system --deserialize 22
├─NetworkManager --no-daemon
│ └─2*[{NetworkManager}]
├─VGAuthService -s
├─abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG at list_del corruption
├─abrtd -d -s
├─agetty --noclear tty1 linux
├─auditd
│ └─{auditd}
-- 省略部分信息 --
实践操作情况-02:显示运行进程的子父进程之间的关系
[root@xiaoQ ~]# pstree -c
systemd─┬─NetworkManager─┬─{NetworkManager}
│ └─{NetworkManager}
├─VGAuthService
├─abrt-watch-log
├─abrtd
├─agetty
├─auditd───{auditd}
├─chronyd
├─containerd─┬─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ ├─{containerd}
│ └─{containerd}
-- 省略部分信息 --
实践操作情况-03:显示正在处理的进程信息
[root@xiaoQ ~]# pstree -h
├─sshd───sshd───bash───pstree
-- 省略部分信息 --
02 查看当前动态进程状态
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析;
top命令中按f可以查看显示的列信息,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。
带*号的是默认列。
语法格式:top [参数]
参数信息:
常见指令:( interactive command)
实践操作情况-01:查看实时的进程情况信息
[root@xiaoq ~]# top
top - 21:58:17 up 9:24, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 107 total, 1 running, 105 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995712 total, 82648 free, 124420 used, 788644 buff/cache
KiB Swap: 1572860 total, 1572860 free, 0 used. 719464 avail Mem
-- 上半部分,系统资源使用情况汇总说明
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
813 root 20 0 305280 6400 5024 S 0.3 0.6 1:01.48 vmtoolsd
2174 root 20 0 58308 2072 1480 R 0.3 0.2 0:00.13 top
1 root 20 0 125888 4324 2568 S 0.0 0.4 0:02.17 systemd
-- 下半部分,具体进程使用资源详细情况
输出内容信息说明:
说明:以上信息部分的重要核心知识会在后续内容讲解,大体以了解为主,可以利用man top获取详细说明
系统进程中断概念
01 中断概念介绍说明
中断是系统用来响应硬件设备请求的一种机制,会打断进程的正常调度的执行,然后调用内核的中断处理程序来响应设备的请求。
从本质上讲中断是一种电信号,当设备有某种事件发生时,就会产生中断,通过总线把电信号发送给中断控制器。如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚;处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理;
简而言之,就是可以控制CPU中断正在处理的进程任务,完成一些特定的任务进程;
形象比喻:类似于和别人微信视频聊天,来了电话的情况;
02 中断概念作用说明
用生活的案例进行说明,比如订了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度;
所以你只能苦苦等待,时不时到门口去看看外卖送到没,而不能干其他事情。
但是,如果在订外卖的时候,和配送员约定好,让他送到后给你打个电话,那你就不用苦苦等待了,可去忙别的;
一旦电话响起,接完电话去取外卖就可以了。这里的“打电话”,其实就是一个中断;
没接到电话的时候,可以做其他的事情,只有接到了电话(也就是发生了中断),才要进行另一个动作:取外卖;
通过此例子就可以发现,中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。
03 中断存在问题说明
由于中断处理程序会打断其他进程的运行,为了减少对正常进程运行调度的影响,中断处理需要尽可能快运行;
如果中断本身要做的事情不多,那么处理中断服务程序就只是花费较少的时间;
如果中断本身要做的事情很多,那么处理中断服务程序就将会花费很长的时间;
需要注意:中断处理程序在响应中断时,还会关闭接收处理其他的中断,会导致其他中断不能响应,造成中断丢失
比如在订外卖时,订了2份外卖:
两个不同的配送员配送外卖时,都约订了外卖送到时进行电话确认;
第一份外卖送到时,配送员给你打了个很长的电话,比如确认地址或外卖发票的问题;
第二份外卖送到时,配送员给你打电话将无法拨通,可能尝试几次后配送员就走了;(类似丢失了一次中断)
总结:多个中断出现时,尽量让中断进程消耗的时间越短越好,保证其他中断可以正常处理,否则会出现中断丢失
04 中断概念类别说明
为了解决中断处理程序执行时间过长或中断丢失的问题,Linux将中断处理过程分成了两个阶段:
上半部阶段:用来快速处理中断,在中断禁止模式下运行,主要处理和硬件紧密相关的工作;
下半部阶段:用来延迟处理上半部未完成的工作,通常以内核线程的方式运行;
硬中断概念作用(上半部)
由与系统相连的外设(比如网卡、硬盘)自动产生的,主要是用来通知操作系统系统外设状态的变化。
比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。
软中断概念作用(下半部)
为了满足实时系统的要求,中断处理应该是越快越好。
linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作;
而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。
总结:CPU正在处理进程任务--网卡接收数据(硬中断--数据临时保存到内存中)-- 到内存中处理数据(软中断)
--- CPU恢复处理之前进程任务
举例详细说明-01:生活外卖派送过程
上半部阶段:是接电话后,告诉配送员已经知晓快递送到的事情,其他事情回头再说,然后挂断电话;
下半部阶段:是具体外卖的一些情况说明,比如商量是否开发票,具体怎么开等等;
这样设计后,第一个配送员不会占用你太多时间,第二个配送员过来时,照样能正常打通你的电话。
举例详细说明-02:网卡收取数据过程
网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了,内核会中断处理程序响应它;
上半部阶段:需要进行快速处理,就要把网卡的数据读取到内存中,然后更新硬件寄存器状态(表示数据已读好),最后再发送一个软中断信号,通知下半部做进一步的处理。
下半部阶段:被软中断信号唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析处理;
两个阶段简单理解:
上半部直接处理硬件请求,也就是常说的硬中断,特点是快速执行;
下半部则是有内核触发的,也就是常说的软中断,特点是延迟执行;
Linux中的软中断包含:网络收发、定时任务、数据调度等各种类型,可通过查看/proc/softirqs观察软中断情况
05 中断概念类别区别
- 软中断是执行中断指令产生的,而硬中断是由外设引发的;
- 硬中断的中断信号是由中断控制器提供的,软中断的中断信号由指令直接控制,无需使用中断控制器;
- 硬中断是可屏蔽的,软中断不可屏蔽;
- 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部;
- 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部;
系统进程状态管理
在进行状态管理知识学习前,需要掌握系统进程启动的方式和系统进程停止的方式。
进程启动方式:操作命令+参数信息+程序代码/配置文件,即表示实现将程序运行起来变为进程;
进程停止方式:可以利用系统专门的进程停止命令,向运行的进程发出停止信号,随之停止进程
进程停止命令详述
01 系统进程停止命令-kill
kill命令正如这个单词的意思一样,就是杀死,在linux系统会使用此命令来删除执行中的程序或工作。
kill命令可将指定的信号发送给相应的进程或工作。 kill命令默认使用信号为15,用于结束进程或工作。
如果进程或工作忽略此信号,则可以使用信号9,强制杀死进程或作业。
语法格式:kill [参数] [进程号]
参数信息:
实践操作:
实践操作情况-01:列出当前系统所支持的所有进程控制信号
[root@xiaoq ~]# kill -l
显示的信号信息如下:
虽然,Linux系统支持的信号很多,但是在日常企业应用环节中比较常用的有以下3种信号:
常见信号图形说明:
实践操作情况-02:利用各种信号测试停止进程的情况
# 进程管理模拟环境准备
[root@xiaoq ~]# yum install -y httpd
[root@xiaoq ~]# systemctl start httpd
[root@xiaoq ~]# systemctl is-active httpd
active
-- 确认测试服务程序已经启动成功
# 查看测试服务进程信息
[root@xiaoq ~]# ps -ef|grep httpd
root 2590 1 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2591 2590 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2592 2590 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2593 2590 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2594 2590 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2595 2590 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
# 使用命令停止指定进程
# 发送进程控制信号-SIGHUP
[root@xiaoq ~]# kill -1 2590
[root@xiaoq ~]# ps -ef|grep httpd
root 2590 1 0 00:51 ? 00:00:00 /usr/sbin/httpd -DFOkilREGROUND
apache 2599 2590 0 00:55 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2600 2590 0 00:55 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2601 2590 0 00:55 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2602 2590 0 00:55 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2603 2590 0 00:55 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
-- 主进程收到SIGHUP信号,会重载配置文件信息,主进程编号不变,子进程信息重新启动
# 发送进程控制信号-SIGTERM
[root@xiaoq ~]# kill 2590
[root@xiaoq ~]# ps -ef|grep httpd
-- 主进程收到SIGTERM信号,会确认进程是否有未完成的工作,如果闲置状态,会立即终止进程
# 发送进程控制信号-SIGKILL
[root@xiaoq ~]# ps -ef|grep httpd
root 2636 1 1 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2637 2636 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2638 2636 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2639 2636 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2640 2636 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2641 2636 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@xiaoq ~]# kill -9 2636
-- 主进程收到SIGKILL信号,无论进程是否有未完成的工作,都立即终止进程
[root@xiaoq ~]# ps -ef|grep httpd
apache 2637 1 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2638 1 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2639 1 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2640 1 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2641 1 0 01:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
-- 主进程会被立刻杀死,但子进程依然存在,产生出大量孤儿进程,已不能提供任何服务
[root@xiaoq ~]# systemctl start httpd
[root@xiaoq ~]# ps -ef|grep httpd
root 2656 1 2 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2657 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2658 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2659 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2660 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2661 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
-- 在此启动服务程序后,原有的孤儿进程会被销毁,重新生成服务的主进程和相应子进程
02 系统进程停止命令-pkill
pkill命令可以按照进程名杀死进程;pkill和killall应用方法差不多,也是直接杀死运行中的程序。
如果想杀掉单个进程,请用kill来杀掉。
语法格式:pkill [参数] [进程名]
参数信息:
实践操作情况-01:根据进程名称杀死进程
# 查看测试服务进程信息
[root@xiaoq ~]# systemctl start httpd
[root@xiaoq ~]# ps -ef|grep httpd
root 2656 1 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2657 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2658 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2659 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2660 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2661 2656 0 01:09 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
# 使用命令停止指定进程
[root@xiaoq ~]# pkill httpd
[root@xiaoq ~]# ps -ef|grep httpd
-- 将指定服务进程进行终止
实践操作情况-02:将指定用户的远程连接断开(踢掉滚蛋)
# 获取当前系统登录用户信息
[root@xiaoq ~]# w
01:40:24 up 13:50, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 23:34 0.00s 1.23s 0.01s w
root pts/1 10.0.0.1 01:40 3.00s 0.05s 0.05s -bash
-- 此时有两个用户在登录系统
[root@xiaoq ~]# ps -ef|grep pts
root 2408 1265 0 Jan26 ? 00:00:02 sshd: root@pts/0,pts/1
root 2410 2408 0 Jan26 pts/0 00:00:01 -bash
root 2780 2408 0 01:40 pts/1 00:00:00 -bash
-- 进程中也查看到有两个用户终端建立的远程连接
# 中断指定相应终端建立的连接
[root@xiaoq ~]# pkill -9 -t pts/1
[root@xiaoq ~]# w
01:43:51 up 13:53, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 23:34 7.00s 1.27s 0.01s w
[root@xiaoq ~]# ps -ef|grep pts
root 2408 1265 0 Jan26 ? 00:00:02 sshd: root@pts/0
root 2410 2408 0 Jan26 pts/0 00:00:01 -bash
-- 中断后,显示只有一个用户在远程控制管理系统
