程序(program):通常为二进制程序放置在储存媒介中(如硬盘、光盘、软盘、磁带等),以物理文件的形式存在。
进程(process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载到内存中,操作系统并给予这个内存内的单元一个标识符(PID),也就是说:进程就是一个正在运行的程序。
父子进程
fork and exec
进程都会通过父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以exec的方式来执行实际要进行的进程,最终就成为一个子进程的存在。
系统先以fork的方式复制一个与进程相同的暂存进程,这个进程与父进程唯一的区别就是PID不同!但是这个暂存进程还会多一个PPID的参数。然后暂存进程开始以exec的方式加载实际要执行的程序,以上述图示来讲,新的进程名为qqq,最终子进程的程序代码就会变成qqq了。
系统或网络服务:常驻在内存的进程
对于文件相关的操作如:显示文件ls、新建文件touch、管理文件rm/mkdir/cp/mv、权限管理chmod/chown/passwd,命令所触发的PID很快就结束了。常用文件操作,查考 ubuntu常用命令文件操作
常驻在内存中的进程成为服务(daemon),如:网络联机服务Apache、named、psotfix等,程序被执行后会启动一个可以负责网络监听的端口(port),提供外部客户端(client)的连接请求。
linux的多用户,多任务环境
多用户:在linux系统上可以有多个用户,每个用户都可以有自己的环境设置(~/.bashrc),和一个管理员(root);每个用户都有对应的用户组。
多任务: 一个进程可以看做是一个任务,一个时间点只有一个进程再CPU上运行。但是得益于CUP的高达几个GHz的运作,在CUP的调度机制下,即使是多人同时登陆系统时,也会感觉整台主机好像只为自己一个人服务。这就是多用户,多任务的环境。
多重登陆环境的七个基本终端界面
在linux中,默认提供了6个命令行界面登陆窗口和一个图形界面。使用[Alt]+[F1]~[F7]切换不同的终端机接口,并且每个终端机接口还可以是不同的人(利用adduser添加用户)。在ubuntu的server版本中,默认登陆界面为tty1,使用[Alt]+[F1]~[F6]切换不同界面登录窗口。没有提供图形界面,需要手动安装。
在ubuntu的桌面版中,默认登录为图形界面,使用[Ctrl]+[Alt]+[F1]~[F7]切换不同登陆窗口。
特殊进程管理行为:如果tty1中的程序卡死了,可以切换到tty2,通过PID,用kill
命令结束结束卡死的进程,在回到tty1
bash环境下的工作管理(job control)
前面提到了”父子进程”,当我们登陆tty1的bash之后就取得了一个PID,之后再bash中执行的命令都是他的子进程。
当在命令行界面tty1工作时,如果要执行多个任务,比如在复制一个特别大的文件的同时,还想使用vim编辑文本,这时候就只有切换到tty2,创建一个新的bash进程来工作了,比较麻烦。不如图形界面工作的时候,可以通过[ctrl]+[alt]+[t]打开新的命令行编辑文本。
如何在tty1的bash进程中工作呢?,例:
重点在&
,把当前的进程放在后台运行,依旧是在执行这个命令之后,在这一bash任然可以继续干其他操作,如vim编辑文本。
接下来我们重点看一下job control。
job control:当我们登录系统取得bash shell之后,在单一终端机下同时进行多个工作的行为管理。如:我们登陆bash后,想要一边复制,一边进行数据查找,一遍vim编程,并且在一个bash内实现,不用通过不同tty的切换,不用在图形界面打开不同的bash。
脱机管理
job control中的”后台”指的是bash下可以避免[ctrl] + [c]中断的一个情境,并不是系统的后台。如果当前bash结束后,在bash中正在执行的其他进程也将结束。通过nohup
可以达到把任务房到系统后台中去。
难免有疏忽之处,如有问题请留言!