进程管理与SELinux初探
一、什么是进程
Linux中触发任何一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时根据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置
1.1 进程与程序(process & program)
-
程序:通常为二进制程序,放置在存储媒介中(硬盘、软盘等),以物理文件的形式存在
-
进程:程序被触发后,执行者的权限与属性、程序的代码与所需数据等都会被加载到内存中,操作系统给予这个内存中的单元一个标识符(PID),可以说进程就是一个正在运行的程序
[admin@localhost ~]$ bash [admin@localhost ~]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 22567 22557 0 80 0 - 29107 do_wai pts/0 00:00:00 bash 0 S 1000 22704 22567 0 80 0 - 29082 do_wai pts/0 00:00:00 bash 0 R 1000 22747 22704 0 80 0 - 38332 - pts/0 00:00:00 ps
-
fork and exec:程序调用的流程
- Linux的程序调用通常称为fork-and-exec的流程。进程都会借由父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以exec的方式来执行实际要执行的进程,最终就成为一个子进程
-
系统或网络服务:常驻在内存的进程(服务daemon)
二、任务管理(job control)
2.1 什么是任务管理
执行任务管理的操作中,每个任务都是目前bash的子进程,即彼此之间是有相关性的,无法由任务管理的方式由tty1的环境去管理tty2的bash
2.2 job control 的管理
-
直接将命令丢到后台中执行的
&
-
将目前的任务丢到后台中暂停:
[Ctrl]+Z
-
查看目前的后台任务状态:jobs
jobs [-lrs] 选项与参数: -l :列出PID -r :仅列出正在后台run的任务 -s :仅列出正在后台暂停(stop)的任务
[admin@localhost ~]$ jobs -l [1]- 24196 Stopped vim .bashrc [2]+ 24216 Stopped find / -print
- +代表最近被放到后台的任务,-代表最近第二个被放到后台的任务
-
将后台任务拿到前台来处理:fg
不加参数默认取出"+",只有"-"则取出- [admin@localhost ~]$ jobs -l [1]- 24196 Stopped vim .bashrc [2]+ 24216 Stopped find / -print [admin@localhost ~]$ fg %1 <== %可以省略 vim .bashrc [1]+ Stopped vim .bashrc [admin@localhost ~]$ jobs -l [1]+ 24196 Stopped vim .bashrc [2]- 24216 Stopped find / -print
-
让任务在后台下的状态变成运行中:bg
-
管理后台当中的任务:kill
-9
:强制删除一个不正常的任务-15
:以正常步骤结束一项任务
2.3 脱机管理问题
- nohup
三、进程管理
3.1 查看进程
-
ps
:将某个时间点的进程运行情况截取下来[admin@localhost ~]$ ps aux <==查看系统所有的进程 [admin@localhost ~]$ ps -lA <==也是能够查看系统所有的进程
- 仅查看自己bash的进程:【
ps -l
】 - 查看所有系统运行的进程:【
ps aux
】
- 仅查看自己bash的进程:【
-
top
:动态查看进程的变化[admin@localhost ~]$ echo $$ 22704 [admin@localhost ~]$ top -d 2 -p 22704 top - 09:17:47 up 1 day, 3:44, 2 users, load average: 0.22, 0.10, 0.07 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie %Cpu(s): 16.2 us, 3.0 sy, 0.0 ni, 80.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995676 total, 67960 free, 632992 used, 294724 buff/cache KiB Swap: 2097148 total, 1524988 free, 572160 used. 135296 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22704 admin 20 0 116460 3132 1792 S 0.0 0.3 0:00.06 bash
-
pstree
:进程树[admin@localhost ~]$ pstree -Aup systemd(1)-+-ModemManager(18342)-+-{ModemManager}(18347) | `-{ModemManager}(18353) |-NetworkManager(786)-+-{NetworkManager}(792) | `-{NetworkManager}(795) |-VGAuthService(5071) |-accounts-daemon(18301)-+-{accounts-daemon}(18302) | `-{accounts-daemon}(18307) |-agetty(23381) |-agetty(23385) ......
3.2 进程的管理
通过给予进程一个信号(signal)去告知进程做什么
代号 | 名称 | 内容 |
---|---|---|
1 | SIGHP | 重新启动 |
2 | SIGINT | [Ctrl] + C |
9 | SIGKILL | 强制中断 |
15 | SIGTERM | 正常终止 |
19 | SIGSTOP | [Ctrl] + Z |
-
kill -signal PID
-
killall -signal 命令名称
将系统当中所有以某个命令名称启动的进程全部删除
3.3 进程的执行顺序
- Priority与nice值
- nice:新执行的命令给予新的nice值
- renice:已存在进程的nice重新调整
3.4 查看系统资源信息
-
free:查看内存使用情况
[admin@localhost ~]$ free -m total used free shared buff/cache available Mem: 972 616 72 52 283 132 Swap: 2047 558 1489
-
uname:查看系统与内核信息
[admin@localhost ~]$ uname -a Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
-
uptime:查看系统启动时间与任务负载
[admin@localhost ~]$ uptime 09:42:55 up 1 day, 4:09, 2 users, load average: 0.77, 0.19, 0.10
-
netstat:追踪网络或socket文件
-
dmesg:分析内核产生的信息
-
vmstat:检测系统资源变化
四、特殊文件与进程
4.1 SUID/SGID权限的命令执行状态
4.2 /proc/*代表的意义
主机上各个进程的PID都以目录的形式存储在/proc中
五、SELinux初探
5.1 什么是SELinux?
【Security Enhanced Linux】
SELinux是在进行进程、文件等详细权限配置时依据的一个内核模块。由于启动网络服务的也是进程,因此刚好也是能够控制网络服务能否读写系统资源的一道关卡。
- 传统:自主访问控制(Discretionary Access Control,DAC)
- SELinux:强制访问控制(Mandatory Access Control,MAC)