• 已分配内存的地址空间;
• 安全属性,包括所有权凭据和特权;
• 程序代码的一个或多个执行线程;
• 进程状态
在操作系统的定义中,程序段,数据段和PCB3部分构成了进程
程序: 二进制文件,静态 /bin/date,/usr/sbin/sshd
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
a: 显示跟当前终端关联的所有进程
u: 基于用户的格式显示(U: 显示某用户ID所有的进程)
x: 显示所有进程,不以终端机来区分
eg:查看本地的一些进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME
COMMAND
root 1 0.1 0.3 194680 7924 ? Ss 12:40 0:55
/usr/lib/systemd/systemd --switched-root --system --deserialize
22
root 2 0.0 0.0 0 0 ? S 12:40 0:00
[kthreadd]
root 3 0.0 0.0 0 0 ? S 12:40 0:00
[ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 12:40 0:00
USER: 启动这些进程的用户
PID: 进程的ID
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
STAT:该程序目前的状态,Linux进程有5种基本状态:
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
D 不可中断状态.
它们含意如下::
<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令
ctrl+c:发送SIGINT信号,终止一个进程
ctrl+z:挂起一个进程,将其放到后台,并且暂停
ctrl+d:表示一个特殊的二进制,EOF
分别在2个不同的终端上打开,
第一个终端:
[root@break test]# tar -zcvf etc.tar.gz /etc
第二个终端:
[root@break ~]# ps -aux | grep tar
du 3053 0.0 0.3 1285444 7456 ? Sl 13:58 0:11 /usr/bin/pulseaudio --start --log-target=syslog
root 16204 0.0 0.0 112724 984 pts/2 S+ 21:59 0:00 grep --color=auto tar
[root@break ~]# ps -aux | grep tar
du 3053 0.0 0.3 1285444 7456 ? Sl 13:58 0:11 /usr/bin/pulseaudio --start --log-target=syslog
root 16205 19.0 0.0 123844 1440 pts/1 D+ 21:59 0:00 tar -zcvf etc.tar.gz /etc
root 16208 0.0 0.0 112724 984 pts/2 S+ 21:59 0:00 grep --color=auto tar
也就是说,在压缩的过程中,处于不可中断的过程。
-e 显示所有进程
-f 显示完整格式输出
[root@break ~]# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:40 ? 00:00:55 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 12:40 ? 00:00:00 [kthreadd]
root 3 2 0 12:40 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 12:40 ? 00:00:00 [kworker/0:0H]
内容:
UID: 启动这些进程的用户
PID: 进程的ID
PPID: 父进程的进程号
C: 进程生命周期中的CPU利用率
STIME: 进程启动时的系统时间
TTY: 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
TIME: 运行进程一共累计占用的CPU时间
CMD: 启动的程序名称
[root@break ~]# uptime
08:49:18 up 9:30, 4 users, load average: 0.00, 0.02, 0.05
时间:08:49:18
up 9:30 :系统运行的时间
使用者个数:4 users
load average : 系统的负载情况,1,5,15,负载,也就是任务队列的平均长度。
找出服务器的负载情况最高的:
服务器1: load average: 0.15, 0.08, 0.01 1核
服务器2: load average: 4.15, 6.08, 6.01 1核
服务器3: load average: 10.15, 10.08, 10.01 4核
答案:服务器2
如果服务器的CPU为1核心,则load average中的数字 >=3 负载过高,如果服务器的CPU为4核心,则load average中的数字 >=12 负载过高。
经验:单核心,1分钟的系统平均负载不要超过3,就可以,这是个经验值。
[root@break ~]# top
top - 08:56:50 up 9:38, 4 users, load average: 0.00, 0.01, 0.05
Tasks: 236 total, 2 running, 232 sleeping, 2 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2030172 total, 219532 free, 982464 used, 828176 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 776432 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
755 root 20 0 21668 1284 972 S 0.3 0.1 0:12.12 irqbalance
第一行:
当前时间:08:56:50
运行时间:9:38
用户数量:4 users
负载情况:load average
第二行:
进程总数:tasks:236 total
运行中的进程:2 running
睡眠的进程数:232 sleeping
停止的进程数:2 stopped
僵尸进程:0 zombie
第三行:
系统用户占据cpu的百分比:0.0% us
内核进程占据cpu百分比:0.0 sy
用户进程通过改变优先级的进程占用CPU百分比:0.0 ni
空闲cpu占百分比:100.0 id
等待IO:0.0 wa
硬中断:0.0 hi
软中断:0.0 si
虚拟内存占用cpu: 0.0 st
第四行:
物理内存总量:2030172 total
空闲的内存: 219532 free,
使用的总量: 982464 used
缓冲的总量:828176 buff/cache
第五行与第四行类似,描述的是swap的情况。
第六行:
PID:进程ID
USER:进程所有者的用户名
PR:优先级,内核调整
NI:进程优先级,可以用户调整
VIRT:虚拟内存
RES:物理内存
SHR:共享内存
S:进程状态
%CPU:上次更新到现在CPU时间占用百分比
%MEM:物理内存百分比
TIME+:cpu时间总计
COMMAND:命令/命令行
top的简单使用:
空格刷新
1显示各个cpu
q退出
P:CPU排序
M:内存排序
T:时间排序
u:查看某个人的信息
p:查看某个进程的状态
[root@break ~]# ps -aux | grep vim
root 16050 0.0 0.2 151820 5348 pts/1 T 08:30 0:00 vim a.txt
root 16080 0.0 0.2 151820 5352 pts/1 T 08:32 0:00 vim b.txt
root 16915 0.0 0.0 112720 980 pts/2 S+ 09:29 0:00 grep --color=auto vim
[root@break ~]# top -p 16050
top - 09:29:26 up 10:10, 4 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 0 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2030172 total, 219868 free, 982472 used, 827832 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 776852 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16050 root 20 0 151820 5348 2728 T 0.0 0.3 0:00.04 vim
lsof命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
第一个终端:
[root@break test]# ps -aux | grep a.txt
root 16050 0.0 0.2 151820 5348 pts/1 T 08:30 0:00 vim a.txt
root 17741 0.2 0.2 151868 5448 pts/2 S+ 09:39 0:00 vim a.txt
root 17753 0.0 0.0 112720 996 pts/1 S+ 09:39 0:00 grep --color=auto a.txt
第二个终端:
[root@break test]# lsof -p 16050
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 16050 root cwd DIR 253,0 4096 16797761 /root
vim 16050 root rtd DIR 253,0 224 64 /
vim 16050 root txt REG 253,0 2294256 26475453 /usr/bin/vim
[root@break test]# ps -aux | grep a.txt
root 16050 0.0 0.2 151820 5348 pts/1 T 08:30 0:00 vim a.txt
root 17741 0.2 0.2 151868 5448 pts/2 S+ 09:39 0:00 vim a.txt
root 17753 0.0 0.0 112720 996 pts/1 S+ 09:39 0:00 grep --color=auto a.txt
[root@break test]# lsof -p 16050
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 16050 root cwd DIR 253,0 4096 16797761 /root
vim 16050 root rtd DIR 253,0 224 64 /
vim 16050 root txt REG 253,0 2294256 26475453 /usr/bin/vim
前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随着消失
后台进程: 也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要与终端交互;
&:将一个进程放到后台
jobs:查看后台进程
bg:将进程放到前台
fg:将进程放到后台
kill killall pkill 都可以杀死进程
kill -l:列出所有的信号,以下是一部分的信号:
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断 crtl+c
3) SIGQUIT 退出
9) SIGKILL 强制终止
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止
20) SIGTSTP 暂停 crtl+z
[root@break ~]# vim a.txt,使用ctrl+z来进行进程的停止
[1]+ 已停止 vim a.txt
[root@break ~]# jobs
[1]+ 已停止 vim a.txt
[1]+ 已停止 vim a.txt
[root@break ~]# fg 1
[root@break ~]# ps -aux | grep a.txt
root 16050 0.0 0.2 151820 5348 pts/1 T 08:30 0:00 vim a.txt
root 17898 0.0 0.0 112720 992 pts/2 S+ 09:51 0:00 grep --color=auto a.txt
[root@break ~]# kill -9 16050
[root@break ~]# ps -aux | grep a.txt
root 17901 0.0 0.0 112720 996 pts/2 S+ 09:52 0:00 grep --color=auto a.txt
优先级取值范围为(-20,19),越小优先级越高, 默认优先级是0
命令1:nice 指定程序的运行优先级
格式:nice n command
命令2:renice 改变程序的运行优先级
格式:renice -n pid
#将vim的优先级改变为5,并且查看,然后使用renice修改
[root@break test]# vim a.txt
[root@break test]# nice -n 5 vim
[root@break test]# nice -n 5 vim a.txt
[1]+ 已停止 nice -n 5 vim a.txt
[root@break test]# ps -aux | grep vim
root 18129 0.1 0.2 151868 5448 pts/1 TN 10:03 0:00 vim a.txt
root 18139 0.0 0.0 112720 984 pts/1 S+ 10:03 0:00 grep --color=auto vim
[root@break test]# top -p 18129
top - 10:03:52 up 10:45, 4 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 0 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2030172 total, 188028 free, 993444 used, 848700 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 755916 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18129 root 25 5 151868 5448 2780 T 0.0 0.3 0:00.02 vim
[root@break test]# renice -n 100 18129
18129 (进程 ID) 旧优先级为 5,新优先级为 19