进程
可执行程序加载到内存中,操作系统为内个程序都形成一个PCB对象(结构体对象),PCB里存放着这个程序的所有的属性。进程=可执行程序+PCB
,CPU执行程序也是先通过该程序的PCB找到相应的程序代码,然后一条一条的执行
既然操作系统对进程的管理就是对PCB的管理,所以PCB里面的属性是在操作系统内部的,用户不能直接访问需要调用其相应属性的接口;
linux的进程演示:
我们以标识符属性为例,写一个代码,在代码里调用相应的系统接口访问这个代码在进入内存后成为进程后,所具有的PCB里面的pid:
需要调用的系统接口:getpid t通过man指令查看他所需要包含的头文件:
我们不断的运行和停止程序:
可以看书内一次进程的pid都会发生变化,因为内次启动程序,都会创建新的进程
而且我们可以看书他的父进程是不变的。
那么父进程是谁呢?
在linux中普通进程都有父进程。
父子进程
linux中在命令行输入 ll /proc 就可以查看内存里的数据
比如此时运行一个程序,我们就能在proc中看到相应进程的pid,他是以目录的形式,里面存的就是进程的属性,当查看这个目录的时候,我们看到
进程创建子进程:调用系统函数fork()
fork()之后代码共享:
再通过man指令查看fork函数可以看到,fork()的返回值为,子进程的pid会返回给父进程,0会返回给子进程
知道了这一点那么我们是否就可以让父子进程分工同时做不同的事情
为什么fork()函数会有两个返回值呢?、
fork()函数的目的就是创建一个子进程,所以在fork()函数内部,当执行到最后返回语句的时候就已经创建了子进程,那么之后的语句就会形成分支,两个进程各自返回各自的值