-
一、概念
程序:一组有序的指令集合,存储在磁盘中,没有执行的概念,是静态的。
进程:一个程序执行的体现,包括创建、调度、执行、消亡,是系统资源分配的最小单位。
线程:轻量级的进程,多个线程使用同一片进程空间,因此存在资源竞争问题。
-
二、进程的组成
1、正文段
2、用户数据段
3、系统数据段
正文段:程序中的代码。
用户数据段:程序中的全局变量、常量或者动态开辟的空间等。
系统数据段:堆栈、PCB(Process Control block)
PCB:进程控制块
Pid:进程id,是操作系统管理进程的唯一标识
程序 = 正文段 + 用户数据段
-
三、进程的分类
1、交互类进程:由shell控制,分为前台进程、后台进程两种。
前台进程:可以输入,可以输出
后台进程:可以输出,不可以输入
2、批处理进程:不属于任何终端,将一系列任务交由一个队列依次执行;
3、守护进程:是一个后台进程(不属于交互类进程),在操作系统启动的时候就可以运行的一个进程,在操作系统即将结束的时候结束的进程。
-
守护进程实现流程
1、创建子进程,父进程结束;fork、exit
2、创建一个会话组,并使子进程成为会话组组长(摆脱终端控制);setid
3、改变进程的工作目录(建议使用不被卸载的目录);chdir
4、重设文件掩码;umask
5、关闭所有已经打开的文件描述符;getdtablesize
6、守护进程功能。
-
四、进程的状态
运行态、等待态、停止态、僵尸态、死亡态
-
五、进程相关命令
1、ps:查看进程信息
ps -aux:查看所有用户的进程详细信息
2、top:动态查看进程信息
3、kill:向进程发送信息
kill -l:查看系统中支持的信号(总62个)
kill 信号编号 进程id号:向进程发送信号
4、进程 &:将进程放到后台运行
5、fg:将后台进程提到前台
fg 任务号
fg % 进程号
6、bg:将后台停止态的进程恢复到运行态
bg 任务号
fg % 进程号
-
六、进程相关的系统调用函数
1、fork:创建一个子进程
子进程id号返回给父进程,0返回给子进程。
子进程拷贝父进程(除进程id号)外的所有内容,不过子进程从fork函数之后开始运行程序,规定父进程会回收子进程产生的资源,如果父进程先于子进程结束,子进程将会变成孤儿进程,由init进程收养。
2、exit/_exit:结束进程
exit为库函数调用,因此在结束进程前会刷新缓冲区。
_exit为系统调用函数,因此在调用之后内核将直接结束进程,不会刷新缓冲区。
3、wait/waitpid:等待进程退出,回收进程产生的资源
wait:阻塞等待任 一 “子进程”退出
waitpid:可阻塞/非阻塞等待指定/任一进程退出,0为阻塞等待,WNOHANG为非阻塞等待。
-
七、进程间通信方式
一、本机间进程通信
1、管道通信:有名管道(pipe)、无名管道(mkfifo);
2、信号通信;signal
IPC对象机制
3、共享内存;shmget、shmat、shmdt、shmctl
4、消息队列;msgget、msgsnd、msgrcv、msgctl
5、信号灯集;semget、semctl、semop
二、跨主机通信
6、套接字通信;