系统进程及服务的控制
一、什么是进程
1.概念:
在linux系统中触发一个事件,就定义其为进程;并同时为其分配一个id,称为PID;并根据触发这个事件的用户和用户的属性信息,给PID所代表的这个进程分配相关的权限信息。这是进程这个概念的一个简单描述。
2.进程与程序:
如何产生一个进程呢?简单来说就是当某个用户(执行者)执行一个命令或者程序时就会触发一个事件,此时系统就会为该事件分配一个pid,这就算产生了进程。 我们也知道,系统要进行各种工作,但系统最底层的硬件只识别二进制文件的数据,若想系统工作就得执行某个二进制文件,而这个二进制文件的内容就是程序。
那么问题来了,进程和程序之间有什么联系呢? 从比较表象的角度看,程序就是存放在磁盘中的数据,用户可以通过动作触发它,然后系统加载程序到内存中,把程序变成了另外一个个体,这个个体就是进程。
那加载到内存中的程序和在磁盘中的程序发生了哪些变化呢?也就是进程和程序有什么区别呢? 区别在哪,要从把程序加载到内存的动机去理解,我们都知道内存中的数据都是系统当前正在使用的数据,既然在使用,就牵扯到对这些数据的管理,要管理这些加载的程序自然要给程序中加入一些控制、管理的字符标识、命令以及所需要的数据,显然加上这些信息的程序就变成了进程。
一般由一个进程衍生出来的进程也会继承父进程的一些相关权限。
3.进程之间的联系:
进程之间是有联系的,就如我们之前学过的文件系统的目录树一样,系统中的进程也是一个树的结构,系统重启后第一个执行的程序是init,它是所有进程的父进程。
例如下图,ps -f 就是bash的子进程,我们可以通过看PID和PPID来判断,PPID就是父进程的标志:
二、进程的查看:
ps -A ####### 查看系统中所有进程
-a ####### 查看当前环境中的进程,但不包含环境信息相关的进程
a ######## 查看当前环境中的进程
-u ####### 显示当前环境的进程,并显示与其相关的具体参数以及进程的用户
f ####### 显示当前环境进程的父子关系
e ###### 显示当前环境的进程命令的详细信息
x ##### 列出系统中所有运行含有tty输出设备的进程
- 常用的ps 组合
ps aux ##### 显示当前系统的所有进程,并显示进程用户
ps ef ###### 显示当前环境进程的父子关系,并显示命令的详细信息
ps ax #### 显示当前系统的所有进程
- 显示进程的指定信息
ps -o xxx #######指定进程的显示信息
comm ##### 进程的名称
user ######进程的所有者
group ###### 进程的所属用户组
%cpu ###### cpu的使用率
% mem #### 内存的使用率
pid ###### 进程的id号
nice ##### 进程的优先级
- 进程排序
ps au --sort=+%cpu | -%cpu -o pid,cpu
=+%mem | -%mem -o pid,mem
- 进程的STAT(状态)信息:
S 代表状态
R 正在运行
N 代表优先级低
< 代表优先级高
l 代表在内存中有所定的空间
s 代表*进程
+ 代表前台运行
- 进程的优先级
- 进程优先级的范围:-20——19(数值越高代表优先级越低)
- 进程优先级的查看: ps a -o pid,nice,comm
- 以某个优先级开启某个程序: nice -n 5 vim & ##### 以-5这个优先级开启vim,并在后台运行
4.更改某进程的优先级: renice -n -5 3116 ##### 更改3116这个进程的优先级为-5
- 进程的动态监控
top ##### 动态监控进程,查看进程信息
s ####### 修改进程刷新间隔时间
m ##### 内存使用量排序
c ##### cpu资源占有率排序
u ###### 输入用户名,查找该用户发起的所有进程
k ##### 对指定进程发起信号(后面跟pid和发起的信号)
h ##### 提供帮助
q ##### 退出
第一行为任务队列信息: 系统当前时间、系统硬件事件、登陆用户、平均负载(通常认为小于1)
第二行进程信息:2个程序正在运行,148个正在休眠,2个停止运行,0个僵尸程序。
第三行为cpu信息:空闲id一般不低于20%
第四行为物理内存信息
第五行为交换分区信息
三、进程的管理:
1.环境中进程的前后台调用
jobs ############ 查看被打入环境后台的进程
ctrl + z ########### 把占用终端的进程打入后台
comme & ######### 让命令直接在后台运行
fg jobnumber ######### 把后台运行的进程掉到前台
bg jobnumber ########## 让后台暂停的进程运行
下面这幅图是把让后台停止的程序运行:
2.进程信号
- 常用信号等级
1 ############ 进程重新加载配置
2 ############ 清除进程在内存中的数据
3 ########### 删除鼠标在内存中的数据
9 ########### 强行结束单个进程(不能被阻塞)
15 ########### 正常关闭进程 (可能被阻塞)
18 ########## 运行暂停的进程
19 ########## 暂停某个进程(不能被阻塞)
20 ########## 把进程打入后台
kill -信号 进程pid
killall -信号 进程名字
pkill -u student -信号
四、控制服务:
1.什么是服务
联系我们的实际生活,服务是什么?服务就是为我们人或者一群人提供各种功能,这种功能可以解决我们生活中的难题,或者为我们的生活提供方便。那么在linux系统中的服务是什么呢?举例来说NetworkManager,它是一个网络服务,提供对网络的管理和控制; sshd.service,它是一个远程登陆服务;chronyd,提供时钟同步服务;rayalog.service,提供远程日志同步服务。 所以我们可以发现linux系统中的服务也就是为单个主机或者多主机之间更好的运行,或者解决一些需求的程序。
2.用什么控制服务:
1.系统的初始化进程systemd 可以完成对服务的一些控制。
2.可以使用systemctl命令来控制服务。
3.进程的控制:
systemctl status sshd ####### 查看服务状态
systemctl start sshd ####### 开启服务
systemctl stop sshd ####### 停止服务
systmctl restart sshd ####### 重启服务
systemctl reload sshd ###### 重新加载配置
systemctl enable sshd ###### 指定开机启动服务
systemctl disable sshd ###### 指定开机不启动服务
systemctl list-units sshd ##### 列出已经开启服务的当前状态
systemctl list-unit-files sshd #### 列出所有服务开机启动的状态
systemctl list-dependencies ###### 列出服务的倚赖关系。
4.sshd服务:
下面我们来做一个sshd服务的实验。
实验环境:两台虚拟机,其中server虚拟机作为服务器,提供ssh服务;desktop虚拟机为客户端,用作测试。
实验步骤:第一步,让客户端能够远程登陆服务端,并进行一些远程操作; 第二步通过生成**让客户端免密登陆;
第三步通过修改sshd服务的配置文件的修改来理解实验原理。
实验目的:掌握sshd服务 的简单配置,理解免密登陆的过程。
我们先开始第一步:让客户端通过sshd连接服务端。 我们只需要让他们同处一个网段。
接着我们做一些远程操作:
下载操作:
上传操作:
第二步:实现免密登陆:
到这里我们已经实现了免密登陆。
第三步,对配置文件进行更改:
此时不能登陆了我们再将悲愤的锁文件复制回来看现象:
又可以登录了!
我们还可以再配置文件中配置白名单、黑名单、登陆界面等,这里不再一一示范。