进程和计划任务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程和计划任务相关的知识,希望对你有一定的参考价值。
一、进程的概述以及Linux和Windows进程的区别
?
在**Linux**内核中,描述一个进程主要是task_struct,一个称为进程描述符的数据结构。这个数据结构很庞大,包含了内核管理一个进程所需的所有信息,描述了一个正在执行的进程,包括进程ID,它打开的文件,进程的地址空间,挂起的信号,进程的状态等等其他信息。
Linux的线程机制和Windows等其他操作系统的很不一样,Linux中没有为线程设置专门的数据结构,也没有专门的线程调度算法,在Linux内核看来,线程就是一个进程,只是一个和其他进程共享资源的特殊进程而已。
在Linux中,创建线程时,和创建普通的进程类似,每个线程都拥有自个的进程描述符task_struct,只是在调用clone()的时候需要传递一些参数标志来指明共享的资源。如图1所示。
?
?
而在windows等其他操作系统中,进程拥有一个进程描述符,描述一些地址空间和打开的文件等共享资源,进程中包含指向不同线程的指针,
这些线程没有进程描述符,只描述一些少量的独有的资源,因此很轻量。同时这些线程共享进程的资源。如图2所示。
?
二、进程的状态及优先级
?
1、进程的状态
Linux内核:抢占式多任务
进程类型:
守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
?
2、进程的优先级
进程优先级:
系统优先级:数字越小,优先级越高
0-139(CentOS4,5) 各有140个运行队列和过期队列
0-98,99(CentOS6)
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139或99
Big O:时间复杂度,用时和规模的关系
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
?
三、查看进程ps、top命令
?
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
BSD方式
a 所有用户在所有终端上运行的前台进程
x 当前用户运行的所有进程(包括前台进程和后台daemon)
ax 所有用户运行的所有进程
** aux** 所有用户运行的所有进程,结果中显示用户名
f 显示父子进程关系
-C 用进程名进行过滤
axo配合
o 自定义输出列
%cpu
%mem
pid
uid
gid
cmd
comm
tty 显示终端名,如为?,表示daemon后台进程
ruser 命令的发起人
euser 命令的真正执行人
state
k 排序或--sort
每个圈中各个含义如下:
?
USER: 进程的当前用户; PID : 毫无疑问, process ID的缩写,也就进程号;
%CPU 进程的cpu占用率;%MEM 进程的内存占用率;
VSZ 进程所使用的虚存的大小;RSS 进程使用的驻留集大小或者是实际内存的大小;
TTY 与进程关联的终端(tty);
STAT 检查的状态:进程状态使用字符表示的,如R(running正在运行或准备运行)、S(sleeping睡眠)、I(idle空闲)、Z (僵死)、D(不可中断的睡眠,通常是I/O)、P(等待交换页)、W(换出,表示当前页面不在内存)、N(低优先级任务)T(terminate终 止)、W has no resident pages
START (进程启动时间和日期);TIME ;(进程使用的总cpu时间);COMMAND (正在执行的命令行命令)
?
当服务器被攻击多了一些莫名其它进程时,这是就需要杀死进程在逐一排错,用kill或killall命令】
用法:kill
-0 无作为,可以用来单纯判断进程是否运行.
-1 -HUP:强制进程重读配置文件
-2 -INT: 中止正在运行的进程;相当于Ctrl+c
-3 -QUIT: 相当于ctrl+\
-9 -KILL: 强制杀死正在运行的进程 (谨慎使用)
-15 -TERM: 终止正在运行的进程 (默认)\
killall 进程命
区别:使用kill命令的时候需要PID,而且PID是会变的,但是我们一般只知道启动进程的程序或命令名字,所以要先用ps结合grep查找对应的PID。killall可以简化这个过程,直接在killall后面跟相应 的命令即可,它会杀死所有使用这个命令名或程序名的进程。
?
我用ping命令举个例子
?
查看进程,看到ping的进程了
?
用kill杀死
此时ping过程已经中断
?
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
?
● top - 20:50:09[当前系统时间],
● up 11:26[系统已经运行了11.26],
● 4 user[个用户当前登录],
● load average: 0.00,0.00,0.00[系统负载,即任务队列的平均长度] 1分 5分 10分
● Tasks: 178 total[总进程数],
● 1 running[正在运行的进程数],
● 177 sleeping[睡眠的进程数],
● 0 stopped[停止的进程数],
● 0 zombie[冻结进程数],
● Cpu(s): 0.0%us[用户空间占用CPU百分比],
● 0.2%sy[内核空间占用CPU百分比],
● 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
● 99.5%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
● 0.0%hi[硬件CPU中断占用百分比],
● 0.0%si[软中断占用百分比],
● Mem: 2038352k total[物理内存总量],
● 803624k used[使用的物理内存总量],
● 1234728kfree[空闲内存总量],
● 59052k buffers[用作内核缓存的内存量]
● Swap: 4194300k total[交换区总量]
● 0k used[使用的交换区总量],
● 4194300k free[空闲交换区总量],
● 422760k cached[缓冲的交换区总量],
ps:以上数据与截图不同是因为此段参数详解来自我当时笔记里的,除了数据不同其余含义一样。
四、计划任务
?
1、计划任务概说;
?
计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 crond 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd 服务器重新启动,这就是一个计划任务;
?
2、周期性任务计划cron
周期性任务计划:cron
相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,用于监控cronie任 务执行状况,如cronie中的任务在过去该运行的时间点未能正常 运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
?
3、crond的启动与安装
在一般情况下,cron都是系统默认安装的,我们要查看软件包是否已经安装:
[[email protected] ~]#rpm -qa |grep cron
CentOS 7: systemctl status crond
CentOS 6: service crond status
?
计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
/etc/crontab
用户cron任务: crontab命令
日志:/var/log/cron
?
*代表所有
cron 配置计划任务的书写格式
分钟 小时 日 月 周 [用户名] 命令
4、让任务计划开机自启动
例如:晚上9点10分运行echo命令
10 21 * * * centos /bin/echo "Howdy!"
例如,每天的8点5分执行haha.sh
“5 8 * * * /opt/./haha.sh”
*如果想自动开机运行,请用下面的办法;*
[[email protected] ~]# chkconfig --levels 35 crond on
全局性文件是 /etc/crontab ,每个用户也有自己的cron配置文件,我们可以通过crontab -e 来编辑它;
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务;
-e: 编辑任务;
-r: 移除所有任务;
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务
对于cron任务来讲,%有特殊用途;如果在命令中要使用%, 则需要转义,将%放置于单引号中,则可不用转义
?
五、扩展知识(如何把一个脚本添加系统服务中)
下面举例说说,如何把一个shell脚本添加为系统服务,并跟随系统启动:
可以看到“/etc/rc.d/init.d”下有很多的文件,每个文件都是可以看到内容的,其实都是一些shell脚本。
系统服务的启动就是通过“/etc/rc.d/init.d”中的脚本文件实现的。我们也可以写一个自己的脚本放在这里。
脚本文件的内容也很简单,类似于这个样子(例如起个名字叫做“hahad”):
. /etc/init.d/functions
start() {
echo "Starting my process "
cd /opt
./haha.sh
}
stop() {
killall haha.sh
echo "Stoped"
}
写了脚本文件之后事情还没有完,继续完成以下几个步骤:
- chmod +x hahad #增加执行权限
chkconfig --add hahad #把hahad添加到系统服务列表
chkconfig hahad on #设定hahad的开关(on/off)
chkconfig --list hahad #就可以看到已经注册了hahad的服务*这时候才完成了全部工作。
以上是关于进程和计划任务的主要内容,如果未能解决你的问题,请参考以下文章