
而在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命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
每个圈中各个含义如下:
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文件中。
1、计划任务概说;
计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 crond 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上4点,对httpd 服务器重新启动,这就是一个计划任务;
2、周期性任务计划cron
3、crond的启动与安装
在一般情况下,cron都是系统默认安装的,我们要查看软件包是否已经安装: [root@6 ~]#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、让任务计划开机自启动
对于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的服务* 这时候才完成了全部工作。