进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。多个程序并发执行,可以提高系统的资源利用率和吞吐量。
进程和程序:
程序只是一个静态的数据和指令集合,而进程是一个程序的动态执行过程,具有生命周期,是动态的产生和消亡的。
进程是资源申请、调度和独立运行的单位,因此它使用系统中的运行资源,而程序不占用系统的运行资源。
程序与进程无一一对应关系。一个程序可以由多个进程所共用,即一个程序在运行过程中可以产生多个进程;一个进程在生命周期内可以顺序执行若干个程序。
Linux中的进程,每个进程有一个识别号,PID(Process ID)。系统启动后的第一个进程是init,PID是1。init是唯一一个由系统内核直接运行的进程。新的进程可以用系统调用fork产生,从一个旧进程中分出一个新进程来,旧进程是新进程的父进程,新进程是产生他的旧进程的子进程,除了init之外,每一个进程都有父进程。
系统启动后,init进程会创建login进程等待用户登录,当用户登录系统后,login进程就会为用户启动shell进程,此后用户运行的进程都是由shell衍生出来的。
除了PID外,每个进程还有另外4个识别号:
实际用户识别号(real user ID),
实际组识别号,
有效用户识别号(effect user ID),
有效组识别号。
实际用户识别号和实际组识别号用于识别正在运行此进程的用户和组,也即运行此进程的用户的识别号和组的识别号。有效用户识别号和有效组识别号确定一个进程对其访问的文件的权限和优先权。
进程分类:
交互进程:有一个Shell启动的进程,可在前台运行,也可在后台运行。
批处理进程:不与特定的终端相关联,提交到等待队列中顺序执行的进程。
守护进程:在Linux启动时初始化,需要时运行于后台的进程。
进程启动方式:
1.手工启动:由用户输入命令直接启动一个进程,分为:
前台启动--直接输入命令
后台启动--在命令行后使用&命令
2.调度启动:事先设置,根据用户要求让系统自动启动
进程管理
ps 查看系统中的进程
kill 杀死系统中的进程(用PID指定)
killall 杀死进程(用进程名称指定)
作业控制
作业控制,指控制当前正在运行的进程的行为,也称为进程控制。是Shell的一个特性,使用户能在多个独立进程间进行切换。
常用命令
命令或快捷键 功能说明
cmd& 该命令在后台运行
Ctrl+d 终止一个正在前台运行的进程(含有正常含义)
Ctrl+c 终止一个正在前台运行的进程(含有强行含义)
Ctrl+z 挂起一个正在前台运行的进程
jobs 显示后台作业和被挂起的进程
bg 重新启动一个挂起的作业,并在后台运行
fg 把一个在后台运行的作业放到前台运行
常用的作业标识符
标识符 说明
%N 第N号作业
%S 以字符串S开头的被命令行调用的作业
%?S 包含字符串S的被命令行调用的作业
%+ 默认作业(前台最后结束的作业,或后台最后启动的作业),等同于%%
%- 第二默认作业