进程是什么
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
• 已分配内存的地址空间;
• 安全属性,包括所有权凭据和特权;
• 程序代码的一个或多个执行线程;
• 进程状态。
程序: 二进制文件,静态 /usr/bin/passwd ,/usr/sbin/useradd
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
进程的生命周期
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。
每个新进程分配一个,唯一的进程 ID (PID),满足跟踪安全性之需。
任何进程都可以创建子进程。
所有进程都是第一个系统进程的后代:
Centos5/6系统进程: init
Centos7系统进程: systemd
进程状态产生的原因
在多任务处理操作系统中,每个CPU(或核心)
在一个时间点上只能处理一个进程。
在进程运行时,它对CPU 时间和资源分配的要求会不断变化,
从而为进程分配一个状态,它随着环境要求而改变。
1.进程管理的目标
[root@localhost ~]# ps aux |head -2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.7 0.2 193772 2624 ? Ss 18:22 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
user:运行程序的用户账户名
PID:进程的序号,id,身份证号
%CPU:进程的cpu消耗百分比
%MEM:进程的内存消耗百分比
VSZ:虚拟内存占用大小
RSS:实际占用内存大小
TTY:进程开启的终端
STAT:当前进程的状态
START:进程开始的时间
TIME:进程CPU使用时间
COMMAND:执行命令的名字,进程文件 进程名
[root@localhost ~]# ps aux --sort -%cpu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2123 1.7 18.6 3035224 185356 ? Sl 18:23 0:24 /usr/bin/gnome-shell
root 1322 0.6 5.2 341880 52004 tty1 Ssl+ 18:22 0:09 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /r
root 2577 0.3 2.2 697884 22488 ? Sl 18:23 0:04 /usr/libexec/gnome-terminal-server
root 726 0.2 0.1 324680 1868 ? Ssl 18:22 0:02 /usr/bin/vmtoolsd
root 2388 0.2 0.9 640756 9760 ? Sl 18:23 0:02 /usr/bin/vmtoolsd -n vmusr
root 1 0.1 0.4 193772 4424 ? Ss 18:22 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 129 0.1 0.0 0 0 ? S 18:22 0:01 [kworker/0:3]
root 768 0.1 0.0 90564 300 ? Ss 18:22 0:01 /sbin/rngd -f
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 18:22 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 18:22 ? 00:00:00 [kthreadd]
root 4 2 0 18:22 ? 00:00:00 [kworker/0:0H]
root 6 2 0 18:22 ? 00:00:00 [ksoftirqd/0]
root 7 2 0 18:22 ? 00:00:00 [migration/0]
root 8 2 0 18:22 ? 00:00:00 [rcu_bh]
root 9 2 0 18:22 ? 00:00:01 [rcu_sched]
[root@localhost ~]# ps axo user,pid,ppid,%mem,command |head -3
USER PID PPID %MEM COMMAND
root 1 0 0.4 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0.0 [kthreadd]
top - 11:45:08 up 18:54, 4 users, load average: 0.05, 0.05, 0.05
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3865520 total, 1100000 free, 580268 used, 2185252 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2917828 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID ,USER, %CPU, %MEM,TIME, COMMAND,上面有介绍此处省略。
VIRT:virtual memory usage 虚拟内存 ( 需要这些内存,但并没有占满。)
RES:resident memory usage 常驻内存 (用了多少内存)
SHR:shared memory 共享内存 (除了自身进程的共享内存,也包括其他进程的共享内存)
h|?帮助
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
< 向前
> 向后
z 彩色,Z设置彩色,使用数字调整*
动态查看进程 top,像windows的任务管理器
[root@localhost ~]# top //回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。
[root@localhost ~]# top -d 1 //每1秒刷新。
[root@localhost ~]# top -d 1 -p 10126 查看指定进程的动态信息
[root@localhost ~]# top -d 1 -p 10126,1 查看10126和1号进程
给进程发送信号(kill -l列出所有支持的信号)
[root@localhost ~]# kill -l
编号 信号名
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断Ctrl+C
3) SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9) SIGKILL 强制终止,无条件
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 暂停
20)SIGTSTP 键盘暂停Ctrl+Z
NI: 实际nice值
PR(+20): 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
[root@localhost ~]# ps axo pid,command,nice,cls --sort=-nice
PID COMMAND NI CLS
32 [khugepaged] 19 TS
747 /usr/sbin/alsactl -s -n 19 19 TS
2390 /usr/libexec/tracker-extrac 19 TS
2391 /usr/libexec/tracker-miner- 19 TS
2392 /usr/libexec/tracker-miner- - IDL
2404 /usr/libexec/tracker-miner- - IDL
31 [ksmd] 5 TS
779 /usr/libexec/rtkit-daemon 1 TS
1 /usr/lib/systemd/systemd -- 0 TS
2 [kthreadd] 0 TS
6 [ksoftirqd/0] 0 TS
7 [migration/0] - FF
cls表示显示策略列
TS 表示该进程使用的调度策略为SCHED_OTHER
FF表示高级进程first in first out
启动不同nice
[root@localhost ~]# nice -n -5 sleep 6000 &
[1] 2220
[root@localhost ~]# nice -n -10 sleep 7000 &
[2] 2229
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 6000 2220 -5
sleep 7000 2229 -10
grep --color=auto sleep 2233 0
[root@localhost ~]# sleep 7000 &
[2] 2669
root@localhost ~]# renice -20 2669
2669
(进程 ID) 旧优先级为 0,新优先级为 -20
foreground:前台进程:是在终端中运行的命令,占领终端。
background:后台进程:没有控制终端,它不需要终端的交互。看不见,但是在运行。
[root@localhost ~]# sleep 2000
运行一个程序,当前终端无法输入,占领前台的现象,
大部分命令行输入已经无效。
运行后台程序
[root@localhost ~]# sleep 3000 &
ps查询所有程序
[root@localhost ~]# ps aux |grep sleep
root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000
jobs查看后台进程
[root@localhost ~]# jobs
[1]- Running sleep 3000 &
调动后台程序至前台
[root@localhost ~]# fg 1 //将作业1调回到前台
消灭后台进程
[root@qianfeng ~]# kill %1
注意,“kill 1” 和 “kill %1” 不同,
前者终止PID为1的进程,
后者杀死作业序号为1的后台程序。
& :后台运行程序
jobs: 查询后台
kill %1 : 停止后台进程
[root@localhost ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz
stepping : 3
microcode : 0x24
cpu MHz : 2793.542
cache size : 3072 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat
bogomips : 5587.08
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1062.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8
cpuinfo:CPU的硬件信息 (型号, 家族, 缓存大小等)
meminfo:物理内存、交换空间等的信息,系统内存占用情况,对应df命令
cmdline:系统启动时输入给内核命令行参数