Linux系统进程管理

什么是进程?
(1)进程是程序的一次执行。
(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
(3)进程是具有独立功能的程序在一个数据结合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
回去看教材定义:
进程是已启动的可执行程序的运行实例,进程的组成:
已分配内存的地址空间
安全属性,包括所有权凭据和特权。
程序代码的一个或多个执行线程。

Linux进程属性:
进程ID(PID):是唯一的数值,用来区分进程
父进程ID(PPID)
启动进程的用户ID(UID)和所归属的组(GID)
进程状态:
进程执行的优先级
进程所连接的终端名
进程资源占用:比如占用资源大小(内存,CPU占用量)

使用ps查看进程工具
一般常用参数:
a :显示跟当前终端关联的所有进程
u:基于用户的格式显示(U:显示某用户ID所有的进程)
x:显示所有进程,不以终端机来区分。
常见组合:ps -aux常用的组合是这个
ps -ef
Linux系统进程管理
注意:使用[]方括号的是内核态的进程。没有括起来的是用户态进程。
上面的参数输出每列含意:
USER: 启动这些进程的用户
PID: 进程的ID
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
STAT:该程序目前的状态,Linux进程有5种基本状态:
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
D 不可中断状态.
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令

查看状态:T表示停止状态 S表示睡眠状态 如果是D为不可终断状态。 这些字母后面的加号(+)表示这个进程是在前台。

前台进程和后台进程的详解:
LINUX后台进程也叫守护进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
一般用作系统服务,可以用crontab提交,编辑或者删除相应得作业。
守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
前台进程就是用户使用的有控制终端的进程,一旦终端关闭进程也会随着消失。
跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z

  1. & 最经常被用到
    这个用在一个命令的最后,可以把这个命令放到后台执行
  2. ctrl + z
    可以将一个正在前台执行的命令放到后台,并且暂停
  3. jobs
    查看当前有多少在后台运行的命令
  4. fg
    将后台中的命令调至前台继续运行
    如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
  5. bg 将一个在后台暂停的命令,变成继续执行
    如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
  6. jobs列举出后台作业信息。([作业号] 运行状态 作业名称)
  7. ctrl+z 将任务放到后台去,并暂停;
  8. bg <%int> 将后台任务唤醒,在后台运行;
  9. fg <%int> 将后任务的程序放到前台;
    Ctrl+c终止一个进程
    Ctrl+z 挂起一个进程。将作业放置到后台(暂停)

uptime查看CPU负载工具
Linux系统进程管理
load average:系统负载,即任务队列的平均长度。三个数值分别为1分钟,5分钟,15分钟前到现在的平均值。
top 命令:
按空格立即刷新
P:按CPU排序
M:按内存排序
T:按时间排序
p:进程IP,查看某个进程状态
数字键1:显示显示每个内核的CPU使用率
u/U:指定显示的用户
h:帮助

ps -axu | grep vim
top -p 9667
上面两个命令结合使用可以动态查看某个或某些进程的信息。

杀死进程的N种方法:
kill -9 pid 强制终止进程
1 终端断线 2 中断(Ctrl + C)
3 退出 (Ctrl + \)
15 终止
9强制终止
18 继续(与stop相反,fg/bg命令)
kill能够看到后面的数字代表的意义
killall -o 30m hello
支持杀死一定时间的进程
pkill 可以根据进程名杀死进程
杀死最新进程:pkill -n hello
pkill -c hello 统计运行hello程序的数量。
如何查找进程id
查看端口的问题:
ps
pidof
结合kill使用:kill -9 pidof hello
pgrep hello 通过名字直接获取到进程ID
top可以查到各个进程的进程ID

Linux中CPU可以超过100%,如果是四核那么就可以运行400%。
lsof命令:
这个命令需要安装:yum install -y lsof
举个例子:首先查出pid ps -aux | grep vim
lsof -p 19986 然后就能查看进程在读哪些文件。

pstree -p 以树状图显示进程,并且显示pid

vim 1.txt 打开一个进程,然后按下Ctrl+z使它在后台运行。
ps -aux | grep vim
jobs 查看当前有多少在后台运行的进程
fg 1
[4]+ Stopped vim 3.txt
这个数字代表后面的跟着是哪个就是恢复的那个进程。
#将后台挂起的进程恢复到前台运行。

进程优先级管理:
优先级取值范围(-20,19),数值越小优先级越高,默认优先级为0.
nice 指定程序的运行优先级
格式:nice n command
renice 改变程序的运行优先级
renice -n pid
例子:指定运行vim的优先级为5
nice -n 5 vim 1.txt
通过ps查看这个文件的PID号
ps -aux |grep vim
通过top命令查看优先级
top -p 26114
改变正在运行的进程的优先级
renice -10 26114

screen命令的应用:重点 应用场景:避免终端连接断了,命令停止运行。
screen后台执行命令:
首先安装:yum -y install screen
就会进入一个窗口运行命令
screen -ls 查看已经建立的会话ID
screen -r 44002 重新连接会话
exit #不想使用screen会话了,执行:exit退出。
常用screen参数
screen -S test 新建一个叫test的会话
screen -ls test 列出当前所有会话
screen -r test 回到test会话