进程管理与SELinux

  • 程序(program):通常为 binary program,放置在储存媒介中(如硬盘、光盘、软盘、磁带等),为实体文件的型态存在
  • 进程(process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中,操作系统并给与这个内存单元一个标识符(PID),可以说,进程就是一个正在运作中的程序

job control 的管理

直接将指令丢到背景中执行 &

不怕被 ^c 中断

将目前的工作丢到背景中暂停:^z

在 vim 的一般模式下,按下 ^z 这两个按键,屏幕会出现[1],表示这是第一个工作,而那个+代表最近一个被丢到背景的工作,且目前在背景下预设会被取用的工作(与 fg 这个指令有关)。而那个 stopped 则代表目前这个工作的状态,在预设的情况下,使用 ^z 丢到背景当中的工作都是 暂停 的状态

观察目前的背景工作状态:jobs

jobs [-lrs]
选项与参数:
-l  除了列出job number 与指令串之外,还会列出 PID 的号码
-r  仅列出正在背景 run  的工作
-s  仅列出正在背景中 stop 的工作

输出的信息当中,有 +- 号,+ 代表预设的取用工作,输入 fg 指令时,会把+的指令拿到前景当中来处理

  • +号代表最近被放到背景中的工作号码
  • -号代表最近最后第二个被放置到背景中的工作号码

将背景工作拿到前景来处理:fg

fg %jobnumber
选项与参数:
%jobnumber  工作号码(数字)。注意,那个%时可有可无的

fg -  # 代表将 - 号的那个工作号码拿出来

让工作在背景下的状态变成运行中:bg

管理背景当作的工作:kill

将背景当中的工作直接移除,或者是重新启动

kill -signal %jobnumber
kill -l
选项与参数:
-l  列出目前kill能够使用的讯号(signal)
signal  代表给与后面接的那个工作什么样的指示。用 man 7 signal 可知:
    -1  重新读取一次参数的配置文件(类似 relode)
    -2  代表与由键盘输入 ^c 同样的动作
    -9  立刻强制删除一个工作
    -15 里正常的进程方式终止一个工作。与 -9 是不一样的

kill 后面接的数字默认会是 PID,如果想管理 bash 的工作控制,就得要加上 %数字 了

脱机管理问题

工作管理的背景依旧与终端有关,如果脱机了,放在当前的bash中的背景工作也会被中断掉

nohup 可以让你在脱机或者注销系统后,还能够让工作继续进行

nohup [指令与参数]  # 在终端机前景中工作
nohup [指令与参数] &  # 在终端机背景中工作

nohup:ignoring input and appending output to 'nohup.out'  # 会告知这个讯息

如果你想要让背景的工作在你注销后还能够继续执行,那么使用nohup搭配&是不错的运作情景

进程管理

进程的观察

  • 静态的 ps
  • 动态的 top
  • 以 pstree 来查阅进程树之间的关系

ps:将某个时间点的进程运作情况摘取下来

ps aux  # 观察系统所有的进程数据
ps -lA  # 能够观察所有的系统数据
ps axjf  # 连同部分进程树状态
选项与参数:
-A  所有的 process 均显示出来,与 -e 具有同样的效用
-a  不与 terminal 有关的所以 process
-u 有效使用者(effective user)有关的 process
x   通常与a这个参数一起使用,可列出较完整信息
输出格式规划:
l   较长、较详细的将该PID的信息列出
j   工作的格式(job format)
-f  做一个更为完整的输出

ps这个指令的 man page 不是很好查阅,写的非常庞大。建议直接背两个比较不同的选项,一个是只能查阅自己 bash 进程的 ps -l,一个则是可以查阅所有系统运行的进程 ps aux(注意 ps aux 没有哪个-号)

top:动态观察进程的变化

top [-d 数字] | top [-bnp]
选项与参数:
-d  后面可以接秒数,就是整个进程画面跟新的秒数。预设是 5 秒
-b  以批次的方式执行 top ,还有更多的参数可以使用
    通常会搭配数据流重定向来将批次的结果输出成为文件
-n-b 搭配,意义是,需要进行几次top的输出结果
-p  指定某些个PID来进行观察检测而已
在top 执行过程当中可以使用的按键指令:
       显示在top当中可以输入的按键指令
    P   以 CPU 的使用资源排序显示
    M   以 Memory 的使用资源排序显示
    N   以PID来排序
    T   由该process使用的CPU时间累计(TIME+)排序
    k   给与某个PID一个讯号 (signal)
    r   给与某个PID重新制定一个nice值
    q   离开top软件的按键

top 预设使用 CPU 的使用率作为排序的重点

pstree:找出进程之间的相关性

pstree [-AIU] [-up]
选项与参数:
-A  各进程树之间的连接以ASCII字符来连接
-U  各进程树之间的里连接以万国码的字符来连接。在某些终端接口下可能会有错误
-p  并同时列出每个 process 的PID
-u  并同时列出每个process 的所属账号名称

进程管理

kill -signal PID

kill 可以帮我们将这个signal传送给某个工作(%jobnumber)或者是某个PID(直接输入数字)。要再次强调的是:kill 后面直接加数字与加上 %number 的情况是不同的!

killall [-iIe] [command name]
选项与参数:
-i  interactive的意思,交互式的,若需要删除时,会出现提示字符给用户
-e  exact的意思,表示 后面接的command name 要一致,但整个完整的指令不能超过15个字符
-I  指令名称(可能含参数)忽略大小写

要删除某个进程,可以使用PID或者时启动该进程的指令名称,而如果要删除某个服务的话,最简单的方法就是利用killall, 因为他可以将系统当作所有以某个指令名称启动的进程全部删除

进程的执行循序

系统资源的观察

free:观察内存使用情况

uname:查阅系统与核心相关信息

uptime:观察系统启动时间与工作负载

netstat:追踪网络或插槽文件

dmesg:分析核心产生的讯息

vmstat:侦测系统资源变化

特殊文件与进程

SELinux