1.进程
狭义定义:进程是正在运行的程序的实例
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
进程是由进程控制块、程序段、数据段三部分组成
程序
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
进程和程序区别
1.程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。
2.程序和进程无一一对应关系。一个程序可以由多个时程公用;另一一方面,一个进程在活动中有可顺序地执行若干个程序
线程
进程和线程关系
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。
常用进程常在缓存中,不常用的在内存中。
父子进程的关系
1.子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程
2.在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。
3.父进程终止子进程自然终止。
2.进程状态
task_struct中的state描述进程的当前状态。进程的状态一共有5种,而进程必然处于其中一种状态:
1)TASK_RUNNING(运行)——进程是可执行的,它或者正在执行,或者在运行队列中等待执行。这是进程在用户空间中执行唯一可能的状态;也可以应用到内核空间中正在执行的进程。
2)TASK_INTERRUPTIBLE(可中断)——进程正在睡眠(也就是说它被阻塞)等待某些条件的达成。一旦这些条件达成,内核就会把进程状态设置为运行,处于此状态的进程也会因为接收到信号而提前被唤醒并投入运行。
3)TASK_UNINTERRUPTIBLE(不可中断)——除了不会因为接收到信号而被唤醒从而投入运行外,这个状态与可打断状态相同。这个状态通常在进程必须在等待时不受干扰或等待事件很快就会发生时出现。由于处于此状态的任务对信号不作响应,所以较之可中断状态,使用得较少。
4)TASK_ZOMBIE(僵死)——该进程已经结束了,但是其父进程还没有调用wait4()系统调用。为了父进程能够获知它的消息,子进程的进程描述符仍然被保留着。一旦父进程调用了wait4(),进程描述符就会被释放。
5)TASK_STOPPED(停止)——进程停止执行,进程没有投入运行也不能投入运行。通常这种状态发生在接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的时候。此外,在调试期间接收到任何信号,都会使进程进入这种状态。
需要调整进程的状态,最好使用set_task_state(task, state)函数,在必要的时候,它会设置内存屏障来强制其他处理器作重新排序(SMP)。
进程的各个状态之间的转化构成了进程的整个生命周期,
3.图形中如何查看进程
gnome-system-monitor
4.如何用命令查看进程
ps进程查看工具
-ashell中运行的进程
-x不在shell重运行的进程
-u查看进程用户
-l显示进程的详细信息
-f完全信息full的缩写
-e显示进程的依赖关系
-o %cpu,%mem,user,pid,comm
ps -aux |grep进程关键字
ps ax-o %cpu,%mem,user,pid,comm##查看进程某项信息
对查找出来的进程排序?
ps aux --sort +|-%cpu|%mem...##进程按指定方式排序
#查询CPU占用率前5的进程PID号。???
pstree
[email protected]:~# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
看一下上面的选项都指的什么
PID : 进程号
PPLD: 父进程的进程号
TTY : 进程启动的终端
STAT : 进程当前状态(S休眠状态,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止)
NI : 进程优先级
TIME: 进程自从启动以后启用CPU的总时间
COMMAND/CMD:进程的命令名
USER: 用户名
%CPU: 占用CPU时间和总时间的百分比
%MEM: 占用内存与系统内存总量的百分比
5.如何控制shell重进程的前后台调用
命令&##进程在shell后台运行
ctrl +z##把占用shell的进程打入后台运行暂停工作
jobs##查看被打入后台的进程信息
fg job号##把指定进程调回前台
bg job号##运行起来后台停止的进程
ctrl +c##关闭占用shell进程
6.如何用命令控制进程
1)信号
信号 1##reload进程(不关进程情况下重读配置文件)
信号 2##ctrl +c 删除进程在内存中的信息
信号 3##内存中的鼠标信息清除 (ctrl+\)
信号 9##强行关闭进程 (关闭单一进程)
信号 15##正常关闭进程 (关闭主进程后子进程也关闭)
信号 18##开启停止的进程 (bg job)
信号 19##停止正在运行的进程
信号 20##ctrl +z
2)信号发起
kill 信号 pid
killall信号进程名称 (批量处理)
pkill -u username##结束某个用户的所有进程
7.用户登陆监控
w##查看当前使用系统的用户
w-f##查看当前使用系统的用户并显示使用地点
last##查看登陆过系统的用户
lastb##查看试图登陆但没有成功的用户
[[email protected] cron]# w
14:48:39 up 2:46, 1 user, load average: 0.00, 0.01, 0.00
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/1 192.168.203.1 12:27 0.00s 0.17s 0.02s w
w显示信息的含义:
JCPU: 以终端代号来区分,该终端所有相关的进程的进程执行时,所消耗的CPU时间会显示在这里
PCPU: cpu执行程序消耗的时间
WHAT: 用户下在执行的操作
load average :分别显示系统在过去1、5、15分钟内的平均负载程度。
FROM: 显示用户从何处登录系统,":0"的显示代表该用户时人X Windows下,打开文本模式窗口登录的
IDLE: 用户闲置的时间,这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
查看个别用户信息:w [用户名]
8.top命令 系统进程监控
u username
k 信号 PID
h 帮助
s 多少妙动态监控一次
m 内存排序
c CPU排序
9.计划任务
at 安排作业在某一时刻执行一次
batch 安排作业在系统负载不重时执行一次
cron 安排周期性运行的作业
9.1at命令指定时间的方式
绝对计时方法:
midnight noon teatime
hh:mm [today]
hh:mm tomorrow
hh:mm 星期
hh:mm MM/DD/YY
相对计时方法:
now+n minutes
mow+n hours
now+n days
9.2crontab的命令格式
crontab {-l|-r|-e}
-l 显示当前的crontab
-r 删除当前的crontab
-e 使用编辑器编辑当前crontab文件
好多人都觉得周期计划任务设置起来比较麻烦,其实我们只要掌握规律就很好设置。
crontab -e
规则: 把知道的具体的时间添上,不知道的都添加上*
分钟 小时 天 月 星期 命令/脚本
假如,我们每天早上4点要做一下操作,以下面方式表示:
分钟 小时 天 月 星期 命令/脚本
* 18 * * 1,3 [具体的操作]
[[email protected] test]# crontab -e 回车会进入一个vi文本中
根据我上面介绍格式编写内容,然后保存退出
crontab: installing new crontab 表示创建计划成功
通过下面方式进行查看计划:
[[email protected] test]# cd /var/spool/cron
[[email protected] cron]# ls
root
[[email protected] cron]# cat root
30 17 * * 1-5 /usr/bin/shudown -h now
进程管理命令总结:
top、free、ps、pstree、(p)kill、nohup、jobs、fg、bg、Ctrl+Z、(re)nice。
Top: 性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似windows的任务管理器。
Free:显示内存和swap的详细信息,包括buffers、cached、shared、free。
Ps:显示瞬间进程的状态,不是动态的。常用格式:ps -ef 、ps aux 。f参数以长格式输出。
Pstree:将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),可以指定显示某个使用者的进程。
Kill:终止进程。向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。常用格式:kill pid或kill -9 pid。
Nohup:不挂断地运行命令(让程序后台运行)。守护进程可以直接在命令后面加上&符号,普通程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。(有些人用nohup运行程序后直接按关闭按钮关掉连接的窗口,这样做不规范,程序会随着session的关闭而终止。正确步骤是:先按任意键回到shell终端,然后输入exit退出)。
Jobs:查看当前在后台运行的程序。
Fg:将后台的命令调至前台继续运行。格式:fg %jobId,这里不是进程的pid,是用jobs查到的jobid。
Bg:将一个在后台暂停的命令,变成继续执行。格式:bg %jobId。
Ctrl+Z:这是组合键,将一个正在前台执行的命令放到后台,并暂停。
Nice:内核根据进程的nice值决定进程需要多少处理器时间,取值范围-20到20,值越低优先级越高,Ps axl可以查看 NI 值。降低优先级可以直接用"nice -niceNum 命令"这种格式;提升优先级用"nice --niceNum 命令"的格式,如果为负数则需要root权限。