目录
一、了解程序和进程的关系
1、程序
二进制文件,静态,/bin/date,/usr/sbin/sshd
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 文件中静态保存的代码
2、进程
程序运行的过程,动态,有生命周期及运行状态
- 在CPU及内存中运行的程序代码
- 动态执行的代码
- 父、子进程(一个程序可以创建一个或多个进程)
3、线程
“协程”:利用了线程等待的这个时间可以做别的事情(协程切换任务源很小,效率高)
“回调”:一个任务,多条线程同时执行
线程的状态
线程的三种状态:就绪、运行、阻塞
新建(NEW):新创建了一个线程对象。
可运行(RUNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。
运行(RUNNING):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。
阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice转到运行(running)状态。阻塞的情况分三种:
- 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
- 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lockpool)中。
- 其他阻塞:运行(running)的线程执行Thread.sleep (longms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep ()状态超时、join()等待线程终止或者超时、或者I/o处理完毕时,线程重新转入可运行(runnable)状态。
死亡(DEAD):线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生
线程被包含在进程之中,是进程中的实际运作单位,也是操作系统中能够独立运行的基本单位,也称为轻量进程,一个进程中可以并发多个线程,每条线程可以并执行不同的任务,而我们在任务管理器中看到的一个个进程则是由我们下载的应用程序所产生的,当然一个应用程序也可以包含多个进程。
4、程序 进程理论
线程背包含在进程之中,是进程中的实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程,一个进程中可以并发多个线程,每条线程可以并行执行不同的任务,而我们在任务管理器中看到的一个个进程则是由我们下载的的应用程序所产生的,当然一个应用程序也可以包含多个进程,就比如下方的百度网盘,就运行四个就绪状态的后台进程,一下便是他们的大致管关系。
二、ps命令(静态查看)和 top命令(动态查看)
1、ps命令(静态查看)
-a:显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将显示系统中所有的进程信息
-u:使用以用户为主的格式输出进程信息
-x:显示当前用户在所有终端下的进程信息
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
-aux:以简单列表的形式显示出进程信息
-elf:以长格式显示系统中的进程信息
USER:启动该进程的用户的用户账号的名称
PID:该进程系统中的数字ID号,在当前系统是唯一的
%CPU:cpu占用的百分比
%MEM:内存占用的百分比
VSZ:该进程使用的虚拟内存量
RSS:该进程占用的物理内存存量
TTY:表明该进程在哪个终端上运行,不是从终端启动的就显示”?“
STAT:该进程的状态
START:启动该进程的时间
TIME:该进程占用的cpu时间
COMMAND:启动该进程的命令的名称
STAT进程状态:
-D:不可被唤醒的睡眠状态,通常用于I/O情况
-R:该进程正在运行
-S:该进程处于睡眠状态,可被唤醒
-T:停止状态,可能是在后台暂停或进程处于出错状态
-W:内存交互状态
-X:死掉的进程(应该不会再出现)
-Z:僵尸进程,进程已经中止,但是部分程序还在内存当中
-<:高优先级
-N:低优先级
-L:被缩入内存
-s:包含子进程
-l:多线程
-+:位于后台
-C:进程占用cpu的百分比
F:内核分配给进程的系统标记
S:进程的状态
UID:启动这些进程的用户
PID:进程的进程ID
PPID:父进程的进程号(如果该进程是由另一个进程启动的)
C:进程生命周期中的CPU利用率
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:假如进程被换出,所需交换空间的大致大小
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备
TIME:运行进程需要的累计CPU时间
CMD:进程的启动命令
2、top命令(动态查看)
top 命令全屏操作界面快捷键
默认:3s刷新一次,按s修改刷新时间按空格:立即刷新
p:按cpu排序
M:按内存排序
T:按时间排序
P:进程IP,查看某个进程状态
N:键根据启动时间进程排序
u/U:指定显示的用户
h:可以获得lop程序的在线帮助信息
q:键可以正常退出top程序
top – 10:12:26:当前系统时间
Up 1:10:系统已经运行时间
1 users:当前登录用户
Load average 0.00, 0.01, 0.05:系统平均负载,后面三个数字代表每1分钟,5分钟,15分钟的平均负载
Tasks: 172 total:进程总数
1 running:正在运行的进程数
171 sleeping:睡眠的进程数
0 stopped:睡眠的进程数
0 zombie:僵尸进程数
0.0 us:用户空间占用CPU百分比 查看CPU使用率
0.0 sy:内核空间占用CPU百分比
0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比
100.0 id:空闲CPU百分比
0.0 wa:等待输入输出的CPU时间百分比
0.0 hi:硬中断消耗时间 硬中断占用
0.0 si:软中断消耗时间 软中断占用
0.0 st:虚拟化占用
3861508 total:物理内存总量
3095144 free:空闲内存总量
367196 used:已使用的物理内存总量
339168 buff/cache:用作内核缓存的内存量
3、 pgrep命令
-l:选项可同时输出对应的进程名及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
4、pstree命令
以树形结构列出进程信息
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
pstree -aup 用户名 #以树形结构完整列出对应用户名及进程号
5、jobs命令
查看处于后台的任务列表
-l:可以同时显示该进程对应的PID号
6、手工启动(&、bg、fg)
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入"&"符号
&
这个“&”表示挂起当前进程并不会输出结果,在命令行尾加入"&"符号
将后台的进程恢复运行
使用bg(BackGround,后台)命令,可以将后台中暂停执行(如按Ctrl+Z组合键挂起)的任务恢复运行,继续在后台执行操作
使用fg(ForeGround,前台)命令,可以将后台任务重新恢复到前台运行。
除非后台中的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数。例如,执行如下的“fg 1”命令可以将之前挂起至后台的wget进程重新调入前台执行
[root@jn ~]# jobs命令
[1]- Stopped cp /dev/cdrom mycd.iso
[2]+ Stopped top
[root@jn ~]#fg 1
7、kill、killall、pkill命令
kill [进程pid] #终止指定PID的进程
最常用:
-1[数字]:重新加载进程
-2:正常中断进程(Ctrl C一样)
-3:杀死并退出进程
-9:杀死一个进程
killall可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时使用killall命令将更加方便
pkill可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与pgrep命令基本类似
例如:
-U:指定用户
-t:指定终端
三、计划任务管理
1、at
一次性计划命令
在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentoS系统中默认已安装了at、cronie 软件包,通过 atd 和 crond这个两个系统服务这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 at、crontab 命令进行计划任务设置
at [HH:MM] [YYYY-mm-dd]
任务设置完毕后按Ctrl D 组合键提交
atq:查看未执行操作
atrm 1:删除第一条任务
2、crontab
- 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令。
- 时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
- 这个命令非常设合周期性的日志分析或数据备份等工作。
cat /etc/crontab 查看全局配置文件
主要配置文件:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
crontab -e [-u 用户名] ##编辑计划任务
crontab -l [-u 用户名] ##查看计划任务
crontab -r [-u 用户名] ##删除计划任务