Linux进程和计划任务
进程
内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等特权操作
模式切换(理想状态):70%CPU时间用户模式+30%CPU时间内核模式
进程(Process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的存在生命周期的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体,运行中的程序的一个副本;被载入到内存的一个指令集合
进程ID:PID号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承
Linux内核存储进程信息的固定数据结构格式:task struct
多个任务的task struck组件的链表:task list
进程优先级:
系统优先级: 数字越小,优先级越高
0-139( CentOS4,5)
各有140个运行队列和过期队列
0-98, 99( CentOS6)
实时优先级: 99-0:值最大优先级最高
静态优先级:100-139
nice值: -20到19,对应系统优先级100-139或99
Big O:时间复杂度,用时和规模的关系
O(1):规模变化但是,耗费时间恒定
O(logn):
O(n)线性:
O(n^2)抛物线:
O(2^n):耗费时间随着规模变大急剧变大
程序是一个静态的概念,最为软件资源长期存在于硬盘中。
进程是一个动态的概念,是程序的执行过程。
程序与进程没有一一对应的关系。
进程与程序也没有一一对应关系。
|
父子进程关系:
系统使用fork创建进程,子进程由父进程产生。
父进程终止,子进程自然终止。
如果父进程终止,子进程归属于root(1)进程所有。
|
前台进程:
命令与shell异步运行,即前台运行,用户在其完成前不能执行另一命令。
~~~~~~~~~~~~~~~~~~~~~
后台进程:
命令与shell同步运行,后台进程必须是非交互式的。
|
进程的三种状态:就绪状态,运行状态,阻塞状态。
进程状态的细化分类:
用户态运行:在CPU上执行用户代码。
核心态运行:在CPU上执行核心代码。
在内存就绪:具备运行条件,等待调度程序为它分配CPU。
在内存睡眠:因等待某事件发生,而在内存中排队等待。
在外存就绪:就绪进程被交换到外存上继续处于就绪态。
在外存睡眠:就绪进程被交换到外存上继续等待。
在内存暂停:因调用stop程序而进入跟踪暂停状态,等待其父进程发送命令。
在外存暂停:处于跟踪暂停态的进程被交换到外存上。
创建态:新进程正在被创建,但尚未完成的中间态。
终止态:进程终止自己。
|
w
|
查看当前登陆的用户状态。
|
显示项JCPU |
显示该终端所有相关进程执行消耗的CPU时间。
|
PCPU
|
CPU执行程序消耗的时间。
|
WHAT |
用户正在执行的操作。
|
load average
|
显示当前系统平均负载程度。显示过去1、5、15分钟的平均值 |
FROM
|
显示用户从何处登陆。:0表示从Xwindow登陆。
|
IDLE
|
用户闲置时间。
|
ps
|
进程管理命令
|
-a
|
显示所有用户进程 |
-u
|
显示用户名和启动时间
|
-x
|
显示没有控制终端的进程
|
-l
|
长格式显示,即显示详细信息 |
-w
|
宽行显示,可以使用多个w进行加宽显示
|
-e
|
显示所有进程,包括没有控制终端的进程
|
pstree
|
查看系统中进程信息,以树状显示。 |
显示选项的含义
|
|
PID
|
进程号
|
PPID
|
父进程进程号
|
TTY
|
进程启动的终端
|
STAT
|
进程当前状态
|
S
|
休眠状态
|
D
|
不可中断的休眠状态
|
R
|
运行状态
|
Z
|
僵死状态
|
T
|
停止状态 |
NI
|
进程优先级 |
TIME
|
进程自启动以来占用CPU的总时间
|
COMMAND/CMD |
进程的命令名
|
USER |
用户名
|
%CPU
|
占用CPU时间和总时间的百分比 |
%MEM
|
占用内存与系统内存总量的百分比。
|
ps -le or -aux 查看所有用户执行的进程的详细信息
ps -aux --sort pid 可以按进程执行的时间、PID、UID等对进程进行排序。
ps -uU 用户名 查看系统中指定用户执行的进程
ps -le|grep init 查看指定进程的信息。
kill
|
杀死进程。 |
kill PID
|
关闭进程,关闭父进程可以直接导致其子进程关闭
|
kill -9 PID
|
强制关闭
|
kill -1 PID
|
重启进程
|
xkill
|
关闭图形进程 |
killall
|
关闭进程同名的进程 |
pgrep 服务名
|
查找服务进程号
|
pkill 进程名
|
关闭进程
|
nice
|
指定程序的运行优先级
|
nice -n 程序名(PID)
|
renice
|
改变一个正在运行的程序的优先级 |
renice -n 程序名(PID)
|
|
优先级的范围为(-20,19)
|
优先级的缺省为0
|
no hup program &
|
当用户退出时继续执行
|
CTRL+Z
|
进程挂起 |
CTRL+C
|
终止进程
|
fg
|
恢复到前台继续执行
|
bg
|
恢复到后台继续执行 |
jobs
|
查看被挂起的进程 |
top
|
相当于进程管理器,会动态刷新 |
|
下面指令是在top运行后键入的
|
d
|
指定刷新间隔,默认是3秒钟更新
|
c
|
显示整个命令行而不是仅仅显示命令名
|
u
|
查看指定用户的进程
|
k
|
终止执行中的进程
|
h or ?
|
获得帮助 |
r
|
重新设置进程优先级
|
s
|
改变刷新时间间隔
|
W
|
将当前设置写入~/.toprc文件中
|
|
计划任务命令
|
at
|
安排作业在某一时刻执行一次
|
batch
|
安排作业在系统负载不重时执行一次 |
cron
|
安排周期性运行的作业
|
at [-f 文件名] 时间
|
|
at -d or atrm
|
删除队列中的任务
|
at -l or atq
|
查看队列中的任务
|
at的时间表示法
|
绝对计时方法: midnight noon teatime hh:mm[today] hh:mm tomorrow hh:mm week hh:mm MM/DD/YY |
相对计时方法: now +n minutes now +n hours now +n days |
crontab
|
命令格式
|
crontab{-l|-r|-e}
|
|
-l
|
显示当前的crontab
|
-r
|
删除当前的crontab
|
-e
|
使用编辑器编辑当前的crontab文件
|
crontab -e
|
分钟 小时 天 月 星期 命令/脚本
|
Minute 一天中的哪一分钟【0~59】
|
hour 一天中的哪个小时【0~23】
|
day-of-month 一月中的哪一天【1~31】
|
month-of-year 一年中的哪个月【1~12】
|
day-of-week 一周中的哪一天【0~6】
|
以每天凌晨4点的计划任务举例
|
0 4 * * * 命令,不知道不清楚用*表示
|
逗号用来分隔不连续的值,-用来连接连续的值
|
*/2每隔两分钟,命令建议使用绝对路径
|
使用which 命令名查看命令的绝对路径
|
计划任务的时间值无法设置精确到秒。
“大圣,此去欲何?”
“踏南天,碎凌霄!”
“若一去不回...”
“便一去不回!”