Linux 进程管理 [screen/ps/kill]

原文地址:https://blog.csdn.net/shyrat/article/details/6783551


进程管理

进程的重要性:

  我们在使用操作系统时,各项作业都是通过某个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 

  


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页