1、程序:是存放在磁盘文件中的可执行文件。
2、进程:程序执行实例,进行中的程序;(操作系统用红黑数存进程信息)liux是多进程系统,进程中包含PCB,程序,程序的数据。
3、不同进程之间都是独立的,有独立的空间。在只读段中是init进程入口。
共享内存映射区域可以存放你所用的数据库。
4、程序状态转换图通过状态机转换。程序一开始是就绪态,被cpu调用的是内核运行态。可中断睡眠状态,
可被唤醒回到就绪态。不可中断睡眠状态,只能等到时间到了再继续执行。Init进程可以回收僵尸进程,
且绝不会终止,用来启动内核。
程序----------->就绪态—(CPU执行)—>运行态—(中断)—>暂停态
程序—(睡眠)---->可中断睡眠态----(中断唤醒)---->就绪态
程序—(终止)------>僵死态----(收尸进程:init)
5、进程结构:
(1)只读段(代码区:init,text:代码,rodata:只读数据段)
(2)数据段:.bss,.data
6、unistd.h:
(1)pid_t getpid(void); 返回:调用进程的进程I D
(2)pid_t getppid(void); 返回:调用进程的父进程I D
父进程:bash进程,终端(窗口)
(3)uid_t getuid(void); 返回:调用进程的实际用户I D
(4)uid_t geteuid(void); 返回:调用进程的有效用户I D
(5)gid_t getgid(void); 返回:调用进程的实际组I D
(6)gid_t getegid(void); 返回:调用进程的有效组I D
(7)pid_t fork(void);中文:叉子,进程的分叉
一个进程分叉成两个进程
功能:子进程返回0,父进程返回子进程ID
注意:(fork时:复制一个PCB,全局标量、文件各自拷贝一份,不共享)
9、进程状态:
Ss:子进程
S<:优先级比较高
SN:优先级低
Ssl:l(线程)
S+:后台进程组
SL:L(表示上锁)
Z:僵死进程zombie
T:暂停状态
X:退出状态
R:执行状态
10、fork:
(1)copy on write(写时拷贝技术):fork时读的时候共享一份空间,只有写时拷贝一份;
(2)fork上锁问题:上锁不被继承,子进程不可访问文件
(3)父子ID不同,基础上+1
(4)子进程未决警告会被清徐
(5)fork时,变为两份代码,两份都会执行
(6)父进程退出后,子进程变成孤儿进程,init收留
(7)子进程先退出,变为僵死状态一直存在,父进程退出后,子进程才消失;
原因:子进程退出后变为僵死,但不是孤儿进程,父进程退出后变为孤儿,init进程帮忙收尸;
11.父进程内收尸:
wait函数:等待子进程资源,如果没有wait函数(wait(&status)),子进程变为僵死状态;将由init收尸