进程
什么是进程
进程是在CPU及内存中运行的程序代码,是动态执行的代码,每个程序可以创建一个或多个进程。
父进程和子进程
进程可分为父进程和子进程。
父进程负责保证程序的存活及创建和管理子进程。
每个子进程负责程序的一个功能。
如何查询进程
查看进程信息的命令有:ps
ps----查看静态进程统计信息
常用命令ps -aux,ps -elf
ps -aux
a:显示终端上所有进程,包括其他用户的进程
u:列出进程的用户
x:显示所有终端的进程
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 194088 7168 ? Ss 15:33 0:01 /usr/lib/systemd/systemd
用户 PID号 CPU占用率 内存占用率 使用虚拟内存量 使用物理内存的量 启动进程的终端名 进程的状态
USER:启动进程的用户。
PID:进程的ID。
%CPU:进程占用的CPU百分比。
%MEM: 进程占用内存的百分比。
VSZ:进程使用的虚拟内存量(KB)
RSS:进程占用的物理内存量(KB)。
TTY:启动进程的终端名。不是从终端启动的进程则显示为?
STAT:行程的状态(D:不可中断的休眠状态;R:正在运行状态;S:处于休眠状态,可被唤醒;T:停
止状态,可能是在后台暂停或进程处于跟踪调试状态;2:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START:进程被触发启动时间。
TIME:进程实际使用CPU运行的时间。
COMMAND: 进程的启动命令。
ps -elf
e:显示系统内的所有进程信息。
l:使用长格式显示进程信息。
f:使用完整的格式显示进程信息。
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 48522 ep_pol 15:33 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值,用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:启动进程的00终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令
top----查看进程的动态信息
[root@localhost ~]# top
top - 16:42:59 up 1:09, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 235 total, 1 running, 234 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3861508 total, 1862584 free, 893536 used, 1105388 buff/cache
KiB Swap: 10485756 total, 10485756 free, 0 used. 2506764 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20209 sunlei 20 0 714332 17100 9676 S 0.3 0.4 0:00.40 gsd-color
第一行是队列信息
16:42:59 :系统时间
up 1:09 :系统运行时长
3 users :当前登录的用户数
load average: 0.00, 0.01, 0.05 :系统负载,即单位时间内系统处理的热任务数。 0.00, 0.01, 0.05表示1分钟,5分钟,15分钟前到现在的平均值。
第二行是进程信息
Tasks:总进程数
running:正在运行的进程数
sleeping:休眠的进程数
stopped:中止的进程数
zombie:僵死的进程数
pgrep----查看进程PID信息
根据特定条件查询进程PID信息
-a:显示进程名和PID
[root@localhost ~]# pgrep -a log
4334 xfs-log/dm-0
8069 xfs-log/sda2
8751 /usr/bin/abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG at list_del corruption list_add corruption do_IRQ: stack overflow: ear stack overflow (cur: eneral protection fault nable to handle kernel ouble fault: RTNL: assertion failed eek! page_mapcount(page) went negative! adness at NETDEV WATCHDOG ysctl table check failed : nobody cared IRQ handler type mismatch Kernel panic - not syncing: Machine Check Exception: Machine check events logged divide error: bounds: coprocessor segment overrun: invalid TSS: segment not present: invalid opcode: alignment check: stack segment: fpu exception: simd exception: iret exception: /var/log/messages -- /usr/bin/abrt-dump-oops -xtD
8760 /usr/lib/systemd/systemd-logind
9326 /usr/sbin/rsyslogd -n
-c:仅显示匹配进程的数量
[root@localhost ~]# pgrep -c log
5
-f:匹配进程名及其参数
[root@localhost ~]# pgrep -f log
4334
8069
8751
8760
9326
19551
19716
19998
-l:显示进程名,缺省时只输出PID号
[root@localhost ~]# pgrep "log"
4334
8069
8751
8760
9326
[root@localhost ~]# pgrep -l "log"
4334 xfs-log/dm-0
8069 xfs-log/sda2
8751 abrt-watch-log
8760 systemd-logind
9326 rsyslogd
-U:指定用户
[root@localhost ~]# pgrep -U root
-t:指定终端
[root@localhost ~]# pgrep -t tty1
19388
pstree----以树型列出进程信息
-a:显示完整信息
-u:列出对应用户名
-p:列出PID号
进程的启动方式
手工启动
前台启动
用户输入命令执行程序
[root@localhost opt]# cd ..
[root@localhost /]# ps -aux |grep cd
root 58 0.0 0.0 0 0 ? S< 15:33 0:00 [kmpath_rdacd]
root 78399 0.0 0.0 112728 988 pts/1 S+ 17:22 0:00 grep --color=auto cd
后台启动
在命令行尾加入 & 符号
[root@localhost /]# cp /etc/passwd /opt &
[1] 78428
进程的前后台调度
Ctrl+Z将进程调入后台
jobs查询后台进程
fg将后台进程恢复到前台运行
调度启动
使用at命令设置一次性任务
Ctrl+D提交任务
使用crontab命令设置周期性任务
按照设置好的时间周期(分钟、小时、天、月、周)重复执行指定的命令
主要的设置文件
全局配置文件,/etc/crontab
系统默认的设置,/etc/cron.*
用户定义设置,/var/spool/cron/用户名
crontab命令设置周期计划的命令格式
终止进程的运行
Crl+C:中断正在执行的命令
kill:指定PID号终止进程。
killall:终止指定名称相关的所有进程
-9选项表示强制终止,不加默认为15
pkill:根据特定条件终止相应的进程
pkill的常用选项有
-U:根据所属用户名终止相应的进程
-t:根据进程所在的终端终止相应的进程