进程管理
进程的重要性:
我们在使用操作系统时,各项作业都是通过某个PID来执行的,因此,是否要执行某项作业就与该进程的权限相关
如果Linux系统很忙碌,当整个系统资源快要用完的时候,怎么找到大量占用系统资源的进程,删除该进程,让系统恢复正常
如果由于进程写的不好,导致内存中产生有问题的进程,怎么找到它,然后删除呢?
同时在系统中运行5–6项作业,但其中有一项作业才是最重要的,如何让那一项重要的作业优先执行呢?
我们在操作的时候经常会碰到这样的问题 在同一个登录界面不退出怎么复制文件到另一个文件、不退出当前进程怎么去查看另一个文件,在说进程管理之前说一下
作业管理(job control):
每个作业都是当前bash的一个子程序,彼此间是有关联的,所以我们无法用管理作业的方式由tty1的环境去管理tty2的bash。在进行bash作业管理时,必须要注意到的限制:
1)程序必须是shell的子程序; 2)程序不能等待terminal/shell 的输入
在bash环境下,“前台”和“后台”我们可以这样理解,前台(foreground)即为 你可以操控的作业 ,后台(background)指在内存中自动运行的进程,无法直接接触,要控制就需要用到作业/系统调用
如何将作业放到后台呢?可以使用“&”
e.g. 我们要将/etc/备份为/tmp/etc.tar.gz 同时,又想进行其他的操作,可以这样做:
- tar -xpcf /tmp/etc.tar.gz /etc/ &
1. screen 屏幕切换
使用ssh远程连接 linux服务器工作的时候,比如需要编译某些程序而这时网络不稳定断线, 工作就白干了, 又的重新连接重复刚才的工作,这时候screen就可以派上用场了。
养成好习惯多用 screen!
1).安装screen
———————————
yum install screen
——————————–
2).运行 screen
——————————–
screen
——————————–
3).用法
Ctrl+a 然后按c 建立一个新的screen 会话
Ctrl+a 然后按n 跳转到下一个screen 会话
Ctrl+a 然后按p 返回到上一个screen 会话
Ctrl+a 然后按d 将当前的screen 会话放在背景执行 // 返回到最开始的工作环境
Ctrl+a 然后按(大写)S 分离一个screen 会话出来,分离后用Ctrl+a 然后按tab键 在分离出来的各screen间跳转。
screen -ls 列出当前所有的screen会话
screen -r 进程号 之前Ctrl+a 然后按d 放在背景执行的会话 呼叫回来。
ssh中如果发生了突然断线 那么你重新登陆后 screen -ls 会发现 有screen的状态是处于(Attached)状态 此刻我们使用 screen -d 将他强行放到背景,然后再用screen -r 进程号将他呼叫回来。
如果 screen -ls 看到有死亡的会话 可以用screen -wipe 进程号 将他杀掉。
e.g.
#screen -list可以看到正在运行的screen实例
There is a screen on:
80338.ttyp3.chh (Detached)
1 Socket in /tmp/screens/S-chh.
返回screen -r 80338
彻底退出:#exit
2. ctrl+[z]将“当前”作业放到后台“暂停”
3. fg将后台作业拿到前台处理
4. bg将前台作业拿到后台运行
5. & 直接将命令放到后台“执行”
6. jobs观察作业状态
观察进程运行情况:
ps
查看进程:
ps: process 查看 庞大而古老的一个指令
参数:
进程相关和进程无关
后台进程和终端无关 如:打开电脑输出的提示信息
跟终端相关的进程:用户的默认SHELL 发起 附属于领头SHELL 进程
-e/A:显示所有进程 能显示有关和无关的进程
a: 跟终端无关的所有进程 a 和 x 是关于BSD的
x: 跟终端有关
-u: 显示进程是由哪个用户发起
-F: 显示额外信息
j: jobs work
h:进程间的关系 采取缩进的方式
-o:自己定义显示那些字段 用逗号隔开
常见的查看进程组合
e.g.
ps aux // 这命令比较常用
ps axjf // 这两命令比较常用
ps -ef
ps ejh
ps -eo pid,%cpu,comm //分段查看
ps信息显示常见5段分析: ps 为双向循环列表
1 PID: 进程号 计算机通过结构体表示每一个进程 task_structure; 由堆和进站给出
2 PPID: 父进程进程号
3 tty : 与进程相关的内容
4 STAT: 进程状态
5 time: 处理时间
6 command: 发起的进程
ps -l
[root@node1 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 12559 12557 0 75 0 – 1160 wait pts/0 00:00:00 bash
4 R 0 20121 12559 0 77 0 – 1054 – pts/0 00:00:00 ps
F :表示这个进程的标志位(flag), 4 表示用户为超级用户
S :表示这个进程的状态 (stat)
C :cpu 使用的的只有百分比
PID /PPID: 很常见的进程和父进程
NI :nice 值 用于修改进程优先级
ADDR: 核心功能,指出该进程在内核的那一部分,怎么运行
SZ: 用掉的内存大小
WCHAN: 当前进程是否在运行 – 表示正在运行
TTY :终端位置
TIME :用掉的CPU时间
CMD: 所执行的命令
特别说明:由于ps 能够支持的OS类型相当多,所以它的参数非常多,而且 是否加 “-” 也回有很大的差别(BSD中 一般不需要加-)
具体该怎么操作呢? 参考 man ps
top
格式: top [-d] | top [-bnp]
参数:
-d: 更新的秒数。 默认5秒
-b: 以批处理的方式执行top
在top执行过程中可以使用下列按键查看命令:
?: 显示在top中可以输入的按键命令
P:按CPU的使用资源排序显示
M:按内存的使用资源排序显示
T:按该进程的时间积累(TIME+)排序
k: 给某个PID一个信号
r: 给某个PID重新确定一个值
kill
要删除某个进程,只要KILL 该进程PID或启动该进程的命令名字,如果要删除某个服务最简单的班级就是使用命令killall
下表给出了主要的几个信号代号与名称内容对应关系
e.g
把 SIGHUP 的信号给syslogd 命令启动的PDI
killall -1 syslogd
强制终止所有的以httpd 启动的进程
killall -9 httpd