进程管理知识点总结:
一, 什么是进程
1, 进程与程序
(1)程序 (program): 通常为 binary program , 放置在储存媒体中 (如硬盘, 光盘, 软盘, 磁带等), 为实体文
件的型态存在;
(2)进程 (process): 程序被触发后, 执行者的权限与属性, 程序的程序代码与所需数据等都会被加载内存中, 操
作系统并给予这个内存内的单元一个标识符 (PID), 可以说, 进程就是一个正在运作中的程序.
(3)父进程和子进程: ps -l
父进程: pid
子进程: ppid
注: 日常运维中, kill 杀死一个进程, 过一会还会自动生成, 一般是有 crontab 计划任务或者父进程自动生成; 所
以要删除父进程
(4)fork and exec: 进程呼叫的流程
在 Linux 的进程呼叫通常称为 fork-and-exec 的流程! 进程都会由父进程以复制 (fork) 的方式产生一个
一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序, 最终就
成为一个子进程的存在;
(5)系统或网络服务: 常驻在内存的进程
2,Linux 的多人多任务环境
(1)多人环境: 每个人登入后取得的 shell 的 PID 不同
(2)多任务行为: 每个工作都仅占去 CPU 的几个指令次数, 所以 CPU 每秒能够在各个进程之间进行切换
(3)多重登入环境的七个基本终端窗口: 在 Linux 当中, 默认提供了六个文字界面登入窗口, 以及一个图形界面, 可以使用 [Alt]+[F1].....[F7]来切换不同的终端机界面
(4)特殊的进程管理行为: Linux 每个进程之间可能是独立的, 也可能有相依性, 只要到独立的进程当中, 可以切换到其他的终端机界面删除有问题的那个进程
(5)bash 环境下的工作管理 (job control):cp file1 file2 & 放后台执行, 可以继续执行其它指令
(6)多人多任务的系统资源分配问题考虑:
二, 工作管理 (job control)
1, 什么是工作管理?
(1)工作管理就是当登入系统取得 bash shell 后, 在单一终端机接口下同时进行多个工作行为管理
(2)要进行 bash 的 job control 必须要注意到的限制是:
1, 这些工作所触发的进程必须来自于你 shell 的子进程(只管理自己的 bash);
2, 前景: 你可以控制与下达指令的这个环境称为前景的工作 (foreground);
3, 背景: 可以自行运作的工作, 你无法使用 [ctrl]+c 终止他, 可使用 bg/fg 呼叫该工作;
4, 背景中『执行』的进程不能等待 terminal/shell 的输入(input)
2,job control 的管理
(1)直接将指令丢到背景中『执行』的 &
- tar zcf /tmp/etc.tar.gz /etc &
- [1] 8932
- tar: Removing leading `/' from member names
注解:
在中括号内的号码为工作号码 (job number), 该号码与 bash 的控制有关.
8932 是这个工作在系统中的 PID. 至于后续出现的数据是 tar 执行的数据流, 由于我们没有加上数据流重导向, 所以会影响画面!
[1]+ Done tar zcf /tmp/etc.tar.gz /etc
代表 [1] 这个工作已经完成 (Done) , 该工作的指令则是接在后面那一串指令列
正确的完美写法为: tar - zpcvf /tmp/etc.tar.gz /etc> /tmp/log.txt 2>&1 &
(2)将『目前』的工作丢到背景中『暂停』:[ctrl]-z
VIM a
[3]+ Stopped VIM a
注解:
[3] , 表示这是第三个工作
代表最近一个被丢进背景的工作
Stopped 则代表目前这个工作的状态
(3)观察目前的背景工作状态: jobs
jobs [-lrs]
选项与参数:
-l : 除了列出 job number 与指令串之外, 同时列出 PID 的号码;
-r : 仅列出正在背景 run 的工作;
-s : 仅列出正在背景当中暂停 (stop) 的工作.
常用选项:
- jobs -l
- jobs -r
- jobs -s
(4)将背景工作拿到前景来处理: fg foreground
fg %jobnumber
选项与参数:
%jobnumber :jobnumber 为工作号码(数字)
(5)让工作在背景下的状态变成运作中: bg (工作未结束脱机后, 工作不会继续进行)
bg %jobnumber
选项与参数:
%jobnumber :jobnumber 为工作号码(数字)
(6)管理背景当中的工作: kill
- kill -signal %jobnumber
- kill -l
选项与参数:
-l : 这个是 L 的小写, 列出目前 kill 能够使用的信号 (signal) 有哪些?
signal : 信号用 man 7 signal 可知:
-1 : 重新读取一次参数的配置文件 (类似 reload);
-2 : 代表与由键盘输入 [ctrl]-c 同样的动作;
-9 : 立刻强制删除一个工作;
-15: 以正常的进程方式终止一项工作. 与 -9 是不一样的.
3, 脱机管理
nohup [ 指令与 参数 ] 在终端机前景中工作
nohup [ 指令与 参数 ] & 在终端机背景中工作
nohup 并不支持 bash 内建的指令, 必须要是外部指令才行
例如:
- VIM sleep500.sh
- #!/bin/bash
- /bin/sleep 500s
- /bin/echo "I have slept 500 seconds."
- chmod a+x sleep500.sh
- nohup ./sleep500.sh &
- [2] 14812
nohup: ignoring input and appending output to `nohup.out' <== 会告知这个讯息!
exit
如果你再次登入的话, 再使用 pstree 去查阅你的进程, 会发现 sleep500.sh 还在执行中
三, 进程管理
1, 进程的观察
(1)查看进程 ps
常用组合:
- ps auxf
- ps -lA
- ps axjf
- ps aux | egrep '(cron|rsyslog)'
(2)top : 动态查看进程的变化
echo $$
14836 <== 这个数字是我们 bash 的 PID
(3)pstree
常用组合:
- pstree -A
- pstree -Aup
2, 进程的管理
(1)查看进程信号
kill -l
(2)常用信号详解:
1 HUP 启动被终止的进程, 可让该 PID 重新读取自己的配置文件, 类似重新启动
2 INT 相当于用键盘输入 [ctrl]-c 来中断一个进程的进行
9 KILL 代表强制中断一个进程的进行, 如果该进程进行到一半, 那么尚未完成的部分可能会有『半产品』产
生, 类 似 VIM 会有 .filename.swp 保留下来.
15 TERM 以正常的结束进程来终止该进程. 由于是正常的终止, 所以后续的动作会将他完成. 不过, 如果该进
程已经发生问题, 就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的.
19 STOP 相当于用键盘输入 [ctrl]-z 来暂停一个进程的进行
- (3)kill -signal PID
- kill -HUP $(ps aux | grep 'rsyslogd' | grep -v 'grep'| awk '{print $2}')
(4)killall -signal 指令名称
killall [-iIe] [command name]
选项与参数:
-i :interactive 的意思, 交互式的, 若需要删除时, 会出现提示字符给用户;
-e :exact 的意思, 表示『后面接的 command name 要一致』, 但整个完整的指令不能超过 15 个字符.
-I : 指令名称 (可能含参数) 忽略大小写.
3, 关于进程的执行顺序
(1)Priority 与 Nice 值
PRI(new) = PRI(old) + nice
PRI 值越低越优先. PRI 值是由核心动态调整的, 用户无法直接调整 PRI 值的;
当 nice 值为负值时, 那么该进程就会降低 PRI 值, 即会变的较优先被处理.
nice 值可调整的范围为 -20 ~ 19 ;
root 可随意调整自己或他人进程的 Nice 值, 且范围为 -20 ~ 19 ;
一般使用者仅可调整自己进程的 Nice 值, 且范围仅为 0 ~ 19 (避免一般用户抢占系统资源);
一般使用者仅可将 nice 值越调越高, 例如本来 nice 为 5 , 则未来仅能调整到大于 5;
调整 nice 的方法:
一开始执行程序就立即给予一个特定的 nice 值: 用 nice 指令;
调整某个已经存在的 PID 的 nice 值: 用 renice 指令
(2)nice : 新执行的指令即给予新的 nice 值
nice [-n 数字] command
选项与参数:
-n : 后面接一个数值, 数值的范围 -20 ~ 19.
例如: nice -n -5 VIM &
(3)renice : 已存在进程的 nice
renice [number] PID
选项与参数:
PID : 某个进程的 ID
例如: renice -5 14836
4, 系统资源的观察
(1)free : 观察内存使用情况
free [ [-b|-k|-m|-g|-h] [-t] [-s N -c N]
选项与参数:
-b 以 Byte 为单位显示内存使用情况.
-k 以 KB 为单位显示内存使用情况.
-m 以 MB 为单位显示内存使用情况.
-g 以 GB 为单位显示内存使用情况.
-o 不显示缓冲区调节列.
-s < 间隔秒数> 持续观察内存使用状况.
-c 统计次数
-t 显示内存总和列.
-V 显示版本信息.
常用选项:
- free -m -s 5 -c 5
- free -g -s 5 -c 5
(2)uname : 查阅系统与核心相关信息
uname [- - asrmpi]
选项与参数:
-a : 所有系统相关的信息, 包括底下的数据都会被列出来;
-s : 系统核心名称
-r : 核心的版本
-m : 本系统的硬件名称, 例如 i686 或 x86_64 等;
-p :CPU 的类型, 与 -m 类似, 只是显示的是 CPU 的类型!
-i : 硬件的平台 (ix86)
(3)uptime : 观察系统启动时间与工作负载 /proc/loadavg
(4)netstat : 查看网络连接, 路由表, 接口统计, 化装连接, 和组播会员
netstat -[atunlp]
选项与参数:
-a : 将目前系统上所有的连接, 监听, Socket 数据都列出来
-t : 列出 tcp 网络封包的数据
-u : 列出 udp 网络封包的数据
-n : 不以进程的服务名称, 以端口号 (port number) 来显示;
-l : 列出目前正在网络监听 (listen) 的服务;
-p : 列出该网络服务的进程 PID
常用选项:
- netstat -lanptu
- netstat -r
(5)dmesg : 分析核心产生的讯息
常用命令:
- dmesg | more
- dmesg | grep -i sda
(6)vmstat : 侦测系统资源变化
四, 特殊文件与进程
(1)具有 SUID/SGID 权限的指令执行状态
SUID 的程序被一般用户执行过程:
SUID 权限仅对二进制程序 (binary program) 有效;
执行者对于该程序需要具有 x 的可执行权限;
本权限仅在执行该程序的过程中有效 (run-time);
执行者将具有该程序拥有者 (owner) 的权限.
例子:
[[email protected] ~]$ passwd
Changing password for user wpf.
Changing password for wpf.
(current) UNIX password:
[1]+ Stopped passwd
- [[email protected] ~]$ pstree -uA
- init-+-aliyun-service
- |-crond
- |-2[dhclient]
- |-irqbalance
- |-6[mingetty]
- |-mysqld_safe---mysqld(MySQL)---9[{
- mysqld
- }]
- |-nginx---8[nginx(www)]
- |-PHP-fpm---28[PHP-fpm(www)]
- |-rsyslogd---3[{
- rsyslogd
- }]
- |-sshd-+-sshd---bash
- | -sshd---sshd(wpf)---bash-+-passwd(root)<br/>|-pstree
passwd 执行时具有 SUID 权限给 PID 的程序权限
查询系统中具有 SUID/SGID 的权限:
find / -perm /6000
(2)/proc / 代表的意义
进程都是在内存当中, 内存中的数据是写入 / proc 目录
各个进程的 PID 都是以目录的型态存在 / proc 中
proc 目录下文件与对应的内容:
/proc/cmdline 加载 kernel 时所下达的相关指令与参数! 查阅此文件, 可了解指令是如何启动的!
/proc/cpuinfo 本机的 CPU 的相关信息, 包含频率, 类型与运算功能等
/proc/devices 这个文件记录了系统各个主要装置的主要装置代号, 与 mknod 有关!
/proc/filesystems 目前系统已经加载的文件系统!
/proc/interrupts 目前系统上面的 IRQ 分配状态.
/proc/ioports 目前系统上面各个装置所配置的 I/O 地址.
/proc/kcore 这个就是内存的大小, 不要读他!
/proc/loadavg 还记得 top 以及 uptime 吧? 没错! 上头的三个平均数值就是记录在此!
/proc/meminfo 使用 free 列出的内存信息, 在这里也能够查阅到!
/proc/modules 目前我们的 Linux 已经加载的模块列表, 也可以想成是驱动程序!
/proc/mounts 系统已经挂载的数据, 就是用 mount 这个指令呼叫出来的数据!
/proc/swaps 到底系统挂加载的内存在哪里? 使用掉的 partition 就记录在此!
/proc/partitions 使用 fdisk -l 会出现目前所有的 partition 吧? 在这个文件当中也有纪录!
/proc/uptime 就是用 uptime 的时候, 会出现的信息!
/proc/version 核心的版本, 就是用 uname -a 显示的内容!
/proc/bus/ 一些总线的装置, 还有 USB 的装置也记录在此!
(3)查询已开启 文件 或已执行进程开启之 文件
fuser : 从文件( 或文件系统) 找出正在使用该文件的进程
fuser [-umv] [-k [i] [-signal]] file/dir
选项与参数:
-u : 除了进程的 PID 之外, 同时列出该进程的拥有者;
-m : 后面接的那个档名会主动的上提到该文件系统的最顶层, 对 umount 不成功很有效!
-v : 可以列出每个文件与进程还有指令的完整相关性!
-k : 找出使用该文件 / 目录的 PID , 并试图以 SIGKILL 这个讯号给予该 PID;
-i : 必须与 -k 配合, 在删除 PID 之前会先询问使用者意愿!
-signal: 例如 -1 -15 等等, 若不加的话, 预设是 SIGKILL (-9) !
- fuser -uv 888.tbzkzx.cc.access.log
- USER PID ACCESS COMMAND
- 888.tbzkzx.cc.access.log:
- root 11259 F.... (root)nginx
- www 11260 F.... (www)nginx
ACCESS 详解:
c : 此进程在当前的目录下(非次目录);
e : 可被触发为执行状态;
f : 是一个被开启的文件;
r : 代表顶层目录 (root directory);
F : 该文件被开启了, 不过在等待回应中;
m : 可能为分享的动态函式库;
常用选项:
- fuser -uv /proc
- fuser -umv log
- fuser -mki /home
(4)lsof : 列出被进程所开启的文件名
lsof [-aUu] [+d]
选项与参数:
-a : 多项数据需要『同时成立』才显示出结果时!
-U : 仅列出 Unix like 系统的 socket 文件类型;
-u : 后面接 username, 列出该使用者相关进程所开启的文件;
+d : 后面接目录, 亦即找出某个目录底下已经被开启的文件!
常用选项:
- lsof filename
- lsof -i :80
- lsof -u root -a -U
(5)pidof : 找出某支正在执行的程序的 PID
pidof [-sx] program_name
选项与参数:
-s : 仅列出一个 PID 而不列出所有的 PID
-x : 同时列出该 program name 可能的 PPID 那个进程的 PID
五, SELinux 初探
1, 什么是 SELinux Security Enhanced Linux 安全强化 Linux
(1)当初设计的目标: 避免资源的误用
SELinux 是在进行进程, 文件等细部权限设定依据的一个核心模块
SELinux 能够控制网络服务能否存取系统资源(因为启动网络服务的也是进程)
(2)传统的文件权限与账号关系: 自主式访问控制, DAC
自主式访问控制 (Discretionary Access Control, DAC)就是依据进程的拥有者与文件资源的 rwx 权限来决定有无存取的能力; 存在 root 具有最高的权限和 root 具有最高的权限问题:
(3)以策略规则订定特定进程读取特定 文件 : 委任式访问控制, Mac Mandatory Access Control
Mac 对特定的进程与特定的文件资源来进行权限的控管
上图例子:
WWW 服务器软件的达成进程为 httpd 这支程序, 而默认情况下, httpd 仅能在 /var/www/ 这个目录底下存取文件, 如果 httpd 这个进程想要到其他目录去存取数据时, 除了规则设定要开放外, 目标目录也得要设定成 httpd 可读取的模式 (type) 才行;
2,SELinux 的运作模式
主体(Subject):SELinux 主要想要管理的就是进程;
目标(Objext): 主体进程能否存取的目标资源, 一般就是文件系统;
策略(Policy): 详细的规则来指定不同的服务开放某些资源的存取
targeted: 针对网络服务限制较多, 针对本机限制较少, 是预设的政策;
minimum: 由 target 修订而来, 仅针对选择的进程来保护!
mls: 完整的 SELinux 限制, 限制方面较为严格
安全性本文 (security context) :
上图的重点在『主体』如何取得『目标』的资源访问权限
(1)主体进程必须要通过 SELinux 政策内的规则放行后, 就可以与目标资源进行安全性本文的比对,
(2)若比对失败则无法存取目标, 若比对成功则可以开始存取目标
(1)安全性文本 (security context)
安全性本文是放置到文件的 inode 内的, 因此主体进程想要读取目标文件资源时, 同样需要读取 inode , 这 inode 内就可以比对安全性本文以及 rwx 等权限值是否正确, 而给予适当的读取权限依据;
查看安全性本文:
- ls -Z
- -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
安全性本文主要用冒号分为三个字段:
Identify:role:type
身份识别: 角色: 类型
详细说明:
身份识别 (Identify) :
a)unconfined_u: 不受限的用户(在不受 SELinux 所限制的 bash 进程所产生的文件, 其身份识别大多就是 unconfined_u 『不受限』用户)
b)system_u: 系统用户, 大部分就是系统自己产生的文件
角色 (Role) :
a)object_r: 代表的是文件或目录等文件资源;
b)system_r: 代表的是进程啦! 不过, 一般使用者也会被指定成为 system_r !
类型 (Type) ( 最重要!) :
一个主体进程能不能读取到这个文件资源, 与类型字段有关;
类型字段在文件与进程的定义不太相同:
a)type: 在文件资源 (Object) 上面称为类型 (Type);
b)domain: 在主体进程 (Subject) 则称为领域 (domain) !
(2)进程与 文件 SELinux type 字段的相关性
系统中的进程在 SELinux 底下的安全本文:
- ps -eZ
- LABEL PID TTY TIME CMD
- system_u:system_r:init_t:s0 1 ? 00:00:03 systemd
身份识别 角色 该对应在 targeted 的意义
unconfined_u unconfined_r 一般可登入使用者的进程
system_u system_r 系统账号的非交谈式的系统运作进程
在预设的 target 策略下, 最重要的字段是类型字段 (type), 主体与目标之间是否具有可以读写的权限, 与进程的 domain 及文件的 type 有关
crond 例子:
- ps -eZ | grep cron
- system_u:system_r:crond_t:s0-s0:c0.c1023 1338 ? 00:00:01 crond
- system_u:system_r:crond_t:s0-s0:c0.c1023 1340 ? 00:00:00 atd
- ll -Zd /usr/sbin/crond /etc/crontab /etc/cron.d
- drwxr-xr-x. root root system_u:object_r:system_cron_spool_t:s0 /etc/cron.d
- -rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab
- -rwxr-xr-x. root root system_u:object_r:crond_exec_t:s0 /usr/sbin/crond
首先, 我们触发一个可执行的目标文件, 那就是具有 crond_exec_t 这个类型的 /usr/sbin/crond 文件;
该文件的类型会让这个文件所造成的主体进程 (Subject) 具有 crond 这个领域 (domain), 我们的策略针对
这个领域已经制定了许多规则, 其中包括这个领域可以读取的目标资源类型;
由于 crond domain 被设定为可以读取 system_cron_spool_t 这个类型的目标文件 (Object), 因此你的配置
文件放到 /etc/cron.d/ 目录下, 就能够被 crond 那支进程所读取了;
但最终能不能读到正确的资料, 还得要看 rwx 是否符合 Linux 权限的规范!
3,SELinux 三种模式的启动, 关闭与观察
(1)SELinux 的三种模式:
enforcing: 强制模式, 代表 SELinux 运作中, 且已经正确的开始限制 domain/type 了;
permissive: 宽容模式: 代表 SELinux 运作中, 不过仅会有警告讯息并不会实际限制 domain/type 的存取. 这种模式可以运来作为 SELinux 的 debug 之用;
disabled: 关闭, SELinux 并没有实际运作.
SELinux 的三种模式与上面谈到的政策规则, 安全本文的关系:
查看 SELinux 模式: getenforce
- getenforce
- Enforcing
查看 SELiunx 的策略:
sestatus [-vb]
选项与参数:
-v : 检查列于 /etc/sestatus.conf 内的文件与进程的安全性本文内容;
-b : 将目前政策的规则布尔值列出, 亦即某些规则 (rule) 是否要启动 (0/1) 之意;
配置文件: /etc/selinux/config
(2)SELinux 的启动与关闭
SELinux 模式在 enforcing 与 permissive 之间切换的方法为
setenforce [0|1]
选项与参数:
0 : 转成 permissive 宽容模式;
1 : 转成 Enforcing 强制模式
注意:
在某些特殊的情况下, 从 Disabled 切换成 Enforcing 后, 竟然有一堆服务无法启动, 提示在 /lib/xxx 里面的数据没有权限读取, 所以启动失败. 这大多是由于在重新写入 SELinux type(Relabel) 出错之故, 使用 Permissive 就没有这个错误. 那如何处理呢? 最简单的方法就是在 Permissive 的状态下, 使用『 restorecon -Rv / 』重新还原所有 SELinux 的类型, 就能够处理这个错误!
4,SELinux 策略规则管理
(1)SELinux 各个规则的布尔值查询 getsebool
getsebool [-a] [ 规则 的名 称] ]
选项与参数:
-a : 列出目前系统上面的所有 SELinux 规则的布尔值为开启或关闭值
(2)SELinux 各个规则规范的主体进程能够读取的 文件 SELinux type 查询 seinfo, sesearch
- yum ***tall -y setools-console-*
- seinfo [-Atrub]
选项与参数:
-A : 列出 SELinux 的状态, 规则布尔值, 身份识别, 角色, 类别等所有信息
-u : 列出 SELinux 的所有身份识别 (user) 种类
-r : 列出 SELinux 的所有角色 (role) 种类
-t : 列出 SELinux 的所有类别 (type) 种类
-b : 列出所有规则的种类 (布尔值)
sesearch [-A] [-s 主体类别 ] [-t 目标类别 ] [-b 布 尔 值] ]
选项与参数:
-A : 列出后面数据中, 允许『读取或放行』的相关数据
-t : 后面还要接类别, 例如 -t httpd_t
-b : 后面还要接 SELinux 的规则, 例如 -b httpd_enable_ftp_server
范例一: 找出 crond_t 这个主体进程能够读取的文件 SELinux type
sesearch -A -s crond_t | grep spool
范例二: 找出 crond_t 是否能够读取 /etc/cron.d/checktime 这个我们自定义的配置文件?
- ll -Z /etc/cron.d/checktime
- sesearch -A -s crond_t | grep admin_home_t
(3)修改 SELinux 规则的布尔值 setsebool
setsebool [-P] 『 规则 名 称 』 [0|1]
选项与参数:
-P : 直接将设定值写入配置文件, 该设定数据未来会生效的!
5,SELinux 安全本文的修改
(1)使用 chcon 手动修改 文件的 的 SELinux type
chcon [-R] [-t type] [-u user] [-r role] 文件
chcon [-R] -- reference= 范例文件 文件
选项与参数:
-R : 连同该目录下的次目录也同时修改;
-t : 后面接安全性本文的类型字段! 例如 httpd_sys_content_t ;
-u : 后面接身份识别, 例如 system_u; (不重要)
-r : 后面街角色, 例如 system_r; (不重要)
-v : 若有变化成功, 请将变动的结果列出来
--reference = 范例文件: 拿某个文件当范例来修改后续接的文件的类型!
例子:
- chcon -v -t net_conf_t /etc/cron.d/checktime
- chcon -v -reference=/etc/shadow /etc/cron.d/checktime
(2)使用 restorecon 让 让 文件 恢复正确的 SELinux type
restorecon [-Rv] 文件或目录
选项与参数:
-R : 连同次目录一起修改;
-v : 将过程显示到屏幕上
例子:
restorecon -Rv /etc/cron.d
(3)semanage 默认目录的安全性本文查询与修改
- semanage {
- login|user|port|interface|fconte xt|translation
- } -l
- semanage fcontext - - {
- a|d|m
- } [-frst] file_spec
选项与参数:
fcontext : 主要用在安全性本文方面的用途, -l 为查询的意思;
-a : 增加
-m : 修改;
-d : 删除.
重点回顾:
1, 程序 (program): 通常为 binary program , 放置在储存媒体中 (如硬盘等), 为实体文件的型态存在;
2, 进程 (process): 程序被触发后, 执行者的权限与属性, 程序的程序代码与所需数据等都会被加载内存中, 操
作系统并给予这个内存内的单元一个标识符 (PID), 可以说, 进程就是一个正在运作中的程序.
3, 程序彼此之间是有相关性的, 故有父进程与子进程之分. 而 Linux 系统所有进程的父进程就是 init 这个
PID 为 1 号的进程.
4, 在 Linux 的进程呼叫通常称为 fork-and-exec 的流程! 进程都会藉由父进程以复制 (fork) 的方式产生一个
一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序, 最终就成为一
个子进程的存在.
5, 常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务用户各项任务, 因此这些常驻程序就会
被我们称为: 服务 (daemon).
6, 在工作管理 (job control) 中, 可以出现提示字符让你操作的环境就称为前景 (foreground), 至于其他工作就
可以让你放入背景 (background) 去暂停或运作.
7, 与 job control 有关的按键与关键词有: &, [ctrl]-z, jobs, fg, bg, kill %n 等;
8, 进程管理的观察指令有: ps, top, pstree 等等;
9, 进程之间是可以互相控制的, 传递的讯息 (signal) 主要透过 kill 这个指令在处理;
10, 进程是有优先级的, 该项目为 Priority, 但 PRI 是核心动态调整的, 用户只能使用 nice 值去微调 PRI
11,nice 的给予可以有: nice, renice, top 等指令;
12,vmstat 为相当好用的系统资源使用情况观察指令;
13,SELinux 当初的设计是为了避免使用者资源的误用, 而 SELinux 使用的是 Mac 委任式存取设定;
14, SELinux 的运作中, 重点在于主体进程 (Subject) 能否存取目标文件资源 (Object) , 这中间牵涉到政策
(Policy) 内的规则, 以及实际的安全性本文类别 (type);
15, 安全性本文的一般设定为:『Identify:role:type』其中又以 type 最重要;
16,SELinux 的模式有: enforcing, permissive, disabled 三种, 而启动的政策 (Policy) 主要是 targeted
17,SELinux 启动与关闭的配置文件在: /etc/selinux/config
18,SELinux 的启动与观察: getenforce, sestatus 等指令
19, 重设 SELinux 的安全性本文可使用 restorecon 与 chcon
20, 在 SELinux 有启动时, 必备的服务至少要启动 auditd 这个!
21, 若要管理预设的 SELinux 布尔值, 可使用 getsebool, setsebool 来管理
来源: http://www.bubuko.com/infodetail-3093048.html