Linux程序管理与SELinux(鸟哥)

为方便查阅和记忆

1.进程

执行一个程序或命令时,产生一个进程,PID标识不同进程
不同的用户身份执行程序时,系统给予的权限是不同的,每个进程有三组人的权限,每组人具有r/w/x权限,由这个进程衍生出来的其他进程在一般状态下,也会沿用这个进程的相关权限。
程序:二进制程序放置在存储媒介中,以物理文件的形式存在
进程:程序被触发后,执行者的权限与属性、程序的程序代码与所需要的数据等都会被加载到内存中,操作系统并给予这个内存内的单元一个标识符PID,进程是一个正在运行中的程序
子进程与父进程:PID PPID
fork and exec:过程调用的流程
系统以fork的方式复制一个与父进程相同的暂存进程,新的PID,新增PPID参数是父进程的PID,然后被复制出来的暂存进程以exec的方式来加载实际要执行的程序,最终成为一个子进程的存在

cp file1 file2 &
&表示置于后台执行,在终端中仍然可以做其他的工作

2.工作管理


工作管理中,每个工作其实是bash的子进程,bash只能管理自己的工作,不能管理其他bash的工作
假设只有一个终端,出现提示符操作的环境称为前台foreground,对应的工作还可以放入后台background去暂停或运行,放入后台的工作必须不能与用户互动,后台工作不能ctrl+c终止
前台:可以控制与执行命令的这个环境称为前台工作
后台:可以自行运行的工作,无法使用ctrl+c终止,可使用fg/bg调用该工作
后台中执行的进程不能等待terminal/shell的输入
直接将命令丢到后台执行的&:分配一个job number,利用数据重定向,将命令的stdout和stderr重定向到文件,以免影响前台工作
将目前的工作丢到后台中暂停:ctrl+z

例如vim,在一般模式下ctrl+z将vim丢到后台当中并等待即可,+号表示最近一个被丢进后台的工作,且fg命令默认取用这个工作,stopped表示目前工作状态,暂停状态,-号表示最近最后第二个被放置到后台的工作,fg -可以取用,其他没有+-号标识

Linux程序管理与SELinux(鸟哥)

jobs  [lnprs]命令查看目前后台工作状态

将后台工作拿到前台来处理:fg

fg %jobnumber,如fg %2,fg %1

将工作在后台下的状态变成运行中:bg

管理后台当中的工作:kill

kill -l查看能够使用的信号signal,kill -signal $jobnumber

Linux程序管理与SELinux(鸟哥)

kill -9 %jobnumber or kill -SIGKILL %jobnumber

-9强制删除一个不正常的工作时使用,-15以正常步骤结束一项工作,-1重新读取一次参数配置

kill 默认加PID,用于工作管理时加%jobnumber

脱机管理:此处的后台被并不是放到系统后台去,工作管理的后台与终端机有关,终端退出,后台工作也会结束,使用at和nohub命令可以让你脱机或注销系统后,还能够让工作继续进行

3.进程管理

3.1进程查看

静态ps和动态top,ps将某个时间点的进程运行情况选取下来

仅查看自己bash相关进程:ps -l

Linux程序管理与SELinux(鸟哥)

F表示进程标志,说明进程权限,常见号码4表示此进程的权限是root

S表示进程状态,S=sleep睡眠状态,可以被唤醒,R=running运行中,T=stop停止状态,Z=zombie僵尸状态,进程已经终止但是无法从内存中删除,D不可被唤醒的睡眠状态,可能在等待I/O

UID/PID/PPID该进程被该UID所拥有/PID号码/PPID号码

C,CPU使用率,百分比

PRI/NI,priority/nice缩写,优先级,越小越快执行

ADDR/SZ/WCHAN,都与内存有关,SZ此进程有调多少内存,WCHAN此进程是否运行中,-表示正在运行

TTY登陆者的终端机位置,pts/n

TIME使用掉的CPU时间,此进程实际花费CPU运行时间

CMD即command,造成此程序触发进程的命令

查看系统所有进程:ps aux

Linux程序管理与SELinux(鸟哥)

USER该进程属于哪个用户账号,%CPU使用掉的CPU资源百分比,%MEM占用的物理内存百分比,VSZ使用掉的虚拟内存量,RSS占用的固定内存量,TTY该进程在哪个终端机上运行,?表示与终端机无关,STAT该进程目前的状态,与ps -l的S标识相同(R/S/T/Z),START该进程被触发启动的时间,TIME该进程实际使用CPU运行时间,COMMAND该进程的实际命令

以ps -l的格式显示所有的进程:ps -lA

进程树的程序显示:ps axjf

ps aux | grep egrep '(cron|syslog)'

僵尸进程表示该进程已经执行完毕,或因故应该要终止了,但是父进程却无法完整将该进程结束掉,而造成那个进程一直存在内存中,如果某个进程的CMD后有<defunct>字样时,表示是僵尸进程

top动态产看进程的变化:top -d 秒数,默认5s

Linux程序管理与SELinux(鸟哥)

top主要分为两个界面,上面是整个系统的资源使用情况,按行显示的内容如下:第一行依次是目前的时间,开机所经过的时间,已经登陆的用户数量,系统在1,5,15分钟的平均工作负载,平均运行几个进程(工作),越小越空闲,若高于1需要注意

第二行依次是进程总数,R,S,T,Z的进程数量,注意Z数量;第三行依次是CPU整体负载,其中%wa表示I/O wait,第四行和第五行表示物理内存和虚拟内存使用情况,若swap占用多,表示物理内存不足

top的后半部分是每个进程使用资源情况,PID,USER,PR是priority的缩写,进程的优先执行顺序,NI是nice的缩写,与PR有关,%CPU,%MEM,TIME+是CPU使用时间的累加,top默认使用%cpu排序

在top执行过程中,可以使用的按键命令有

?(shift+?)显示在top当中可以输入的按键命令

P(shift+p大写P)以%CPU排序,M以%MEM排序,N以PID排序,T以TIME+排序

k(小写)给予某个PID一个信号,r给予某个PID重新一个nice值,q离开top

重定向:top -b -n 2 > test.txt

echo $$打印当前bash PID

Linux程序管理与SELinux(鸟哥)

pstree找出进程间的相关性

所有的进程都是依附在init这个进程下面,PID为1,linux内核主动调用的第一个进程,发生僵尸进程需要重新启动init,启动init的是reboot

3.2进程的管理

给进程一个信号signal去告知该进程你想要它做什么,常用信号:

1 SIGHUP 启动被终止的进程,重新读取配置文件,类似重新启动

2 SIGINT 相当于ctrl-c来中断一个进程的进行

9 SIGKILL 强制中断一个进程的进行,可能有半产品产生

15 SIGTERM 以正常的结束进程来终止该进程,已经有问题的进程无法正常终止

17 SIGSTOP 相当于ctrl-z暂停一个进程的执行

kill -signal PID kill传送信号给PID或jobnumber

killall -signal 命令名称  直接跟启动该进程的命令名称

3.3进程执行顺序