如果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 //分段查看