Linux进程管理

目录大纲

  • 1.程序、进程、线程概念
  • 2.查看进程: ps 、pstree、top
    • 2.1.ps查看进程
    • 2.2.pstree查看进程树:
    • 2.3.top动态查看进程
  • 3.kill 命令管理进程
  • 4.nice进程优先级控制
  • 5.前后台进程切换
  • 6.free查看内存消耗量

1.程序、进程、线程概念

程序是静态的(文件),进程是动态的(运行的程序)。

  • 程序:有程序语言编写的代码,经过解释器或者是编译器转换成可以被计算机的机器码。
  • 进程:计算机系统将程序加载到内存,进而读取到CPU,进行执行。
  • 线程:一个运行的程序至少有一个进程,一个进程至少有一个线程。

进程与进程之间,所占的资源是独立的,比如内存。
进程下面可以有多个线程,线程之间的资源是共享的,都是父级进程的资源。线程高并发好,安全性差一些。

2.查看进程: ps 、pstree、top

2.1.ps查看进程

列出当前所有在内存当中的进程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@chmod ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19364 1540 ? Ss 09:37 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 09:37 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:37 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 09:37 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 09:37 0:00 [migration/0]
root 6 0.0 0.0 0 0 ? S 09:37 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 09:37 0:00 [migration/1]
root 8 0.0 0.0 0 0 ? S 09:37 0:00 [migration/1]
root 9 0.0 0.0 0 0 ? S 09:37 0:00 [ksoftirqd/1]
root 10 0.0 0.0 0 0 ? S 09:37 0:00 [watchdog/1]
root 11 0.0 0.0 0 0 ? S 09:37 0:01 [events/0]

  • USER:运行此进程的用户名
  • PID:该进程的号码
  • %CPU:该进程所消耗的CPU资源百分比;
  • %MEM:该进程所消耗的物理内存百分比;
  • VSZ:该进程所消耗的虚拟内存量(Kbytes);
  • RSS:该进程所占用的固定的内存量(Kbytes);
  • TTY:该进程是在哪个终端机上面运作的,若与终端机无关,则显示,另外,tty1-tty6是本机上面的登入者程序,若为pts/0,则表示为由网络连接登入主机的程序。
  • STAT该程序目前的状态,linux进程有5中基本状态:
    • R:正在运行或在运行队列中等待;
    • S:该程序目前正在睡眠当中,但可被某些信号(signal)唤醒;
    • T:该程序目前暂停了;
    • Z:该程序本应该已经终止,但是其父程序却无法正常的终止他,造成zombie(僵尸)程序的状态;
    • D:不可中断状态:< 高优先级的,N 低优先级的,s 包含子进程,l 多线程,+ 前台程序
  • START:该进程被触发启动的时间;
  • TIME:该进程实际使用CPU运作的时间
  • COMMAND:该程序的实际指令

ps -aux 是用BSD的格式来显示进程。
ps -ef 是用标准的格式显示进程。

2.2.pstree查看进程树:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@chmod ~]# pstree
init─┬─NetworkManager
├─abrtd
├─acpid
├─atd
├─auditd───{auditd}
├─automount───4*[{automount}]
├─certmonger
├─crond
├─cupsd
├─dbus-daemon
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ └─hald-addon-inpu
│ └─{hald}
├─master─┬─pickup
│ └─qmgr
├─6*[mingetty]
├─modem-manager
├─ntpd
├─rpc.statd
├─rpcbind
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─udevd───2*[udevd]
└─wpa_supplicant

2.3.top动态查看进程

1
2
3
4
5
6
7
8
9
10
11
12
[root@chmod ~]# top
top - 20:48:48 up 11:10, 1 user, load average: 0.05, 0.01, 0.00
Tasks: 98 total, 1 running, 97 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 873340k total, 658064k used, 215276k free, 93916k buffers
Swap: 4095992k total, 0k used, 4095992k free, 403128k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19689 root 20 0 15032 1212 944 R 0.3 0.1 0:00.01 top
1 root 20 0 19364 1540 1228 S 0.0 0.2 0:01.09 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.12 migration/0

top显示内容中1~5行的含义:

2.jpg

进程信息:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NInice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kbVIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kbRES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

top交互命令:
在top 命令执行过程中可以使用的一些交互命令。

  • h 显示帮助画面,给出一些简短的命令总结说明
  • k 终止一个进程。
  • i 忽略闲置和僵死进程。这是一个开关式命令。
  • q 退出程序
  • r 重新安排一个进程的优先级别
  • S 切换到累计模式
  • s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
  • f或者F 从当前显示中添加或者删除项目
  • o或者O 改变显示项目的顺序
  • l 切换显示平均负载和启动时间信息
  • m 切换显示内存信息
  • t 切换显示进程和CPU状态信息
  • c 切换显示命令名称和完整命令行
  • M 根据驻留内存大小进行排序
  • P 根据CPU使用百分比大小进行排序
  • T 根据时间/累计时间进行排序
  • W 将当前设置写入~/.toprc文件中
  • 按空格键,可以立即刷新
  • < >翻页

3.kill 命令管理进程

kill 命令可以给进程发送信号(停止进程)

kill语法:
kill(选项)(参数)

选项:

-a:当处理当前进程时,不限制命令名和进程号的对应关系;
-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
-s <信息名称或编号>:指定要送出的信息;
-u:指定用户。

kill信号量:
kill -l列出所有信号量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@chmod ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@chmod ~]#

常用的信号量:
HUP 1终端断线
INT 2 中断(同 Ctrl + C
QUIT 3退出(同 Ctrl + \
TERM 15终止
KILL 9强制终止
CONT 18继续(与STOP相反, fg/bg命令)
STOP 19暂停(同 Ctrl + Z

kill -9 pid:可以强制杀死进程
killall httpd:可以通过程序名字httpd,直接杀死所有相关的进程。

4.nice进程优先级控制

nice 命令作用:以什么优先级运行进程,也可以修改正在运行的进程的优先级。默认优先级是0
nice值:-20~19,越小优先级越高,普通用户0~19.

nice语法:
nice -n 优先级数字

例子:

  • 指定优先级运行程序:

    1
    2
    3
    4
    5
    [root@chmod ~]# nice -n -5 vim test.txt
    [root@chmod ~]# ps -aux |grep vim
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root 19864 0.1 0.3 143576 3316 pts/0 S<+ 22:09 0:00 vim test.txt
    root 19890 0.0 0.0 103260 832 pts/1 S+ 22:09 0:00 grep vim
  • 修改正在运行进程的优先级

    1
    [root@chmod ~]# renice -n -9 pid

5.前后台进程切换

启动一个后台进程:

1
2
[root@chmod ~]# vim test.txt &
[1] 19914

&将程序放到后台运行。

查看后台进程序号:

1
2
[root@chmod ~]# jobs
[1]+ Stopped vim test.txt

将后台进程改成前台进程:

1
2
3
4
[root@chmod ~]# fg 1
vim test.txt

1

fg 命令,格式:fg 后台进程序号

6.free查看内存消耗量

查看内存消耗:

1
2
3
4
5
6
7
8
9
10
[root@chmod ~]# free
total used free shared buffers cached
Mem: 873340 661768 211572 0 95444 403292
-/+ buffers/cache: 163032 710308
Swap: 4095992 0 4095992
[root@chmod ~]# free -m
total used free shared buffers cached
Mem: 852 646 206 0 93 393
-/+ buffers/cache: 159 693
Swap: 3999 0 3999

  • buffers #缓存从磁盘读出的内容
  • cached #缓存需要写入磁盘的内容

free 命令格式:free(选项)
选项:

-kKB为单位显示
-mMB为单位显示
-gGB为单位显示
-h 以人性化方式显示

文章目录
  1. 目录大纲
  2. 1.程序、进程、线程概念
  3. 2.查看进程: ps 、pstree、top
    1. 2.1.ps查看进程
    2. 2.2.pstree查看进程树:
    3. 2.3.top动态查看进程
  4. 3.kill 命令管理进程
  5. 4.nice进程优先级控制
  6. 5.前后台进程切换
  7. 6.free查看内存消耗量