进程

进程
并行和并发



时间片:cpu分给某一个进程的处理时间,一旦这个时间到了,那么进程就会回归就绪态。
进程状态。
进程状态转换

 

 创建一个进程:

#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(){
    int num=0;//说明进程之间的处理是分开的,也就是这个num在父进程和子进程中更改,两者互不干扰
    pid_t pid = fork();
//判断是父进程还是子进程:
    if(pid>0){
        //如果大于零,则说明返回的是父进程的进程号:
        printf("%d",pid);
        printf("我是父进程pid:%d,ppid:%d\n",getpid(),getppid());
        num+=10;
        printf("parent num:%d\n",num);
        sleep(1);
    }
    else if(pid==0) {
        printf("son num:%d",num);
        printf("我是子进程pid:%d,ppid:%d\n",getpid(),getppid());
    }
    else{
        printf("创建失败");
    }
//这里父子进程都会执行,因为没有写进判断内部
for(int i=0;i<5;i++){ printf("%d执行了该语句\n",getpid()); sleep(1); } return 0; }

 

结果:

 

 父子进程的说明:
  子进程会在fork()函数之后开始执行
  首先当我们通过fork()函数创建一个新进程的时候,其实是内核拷贝了一份地址虚拟空间,两个虚拟地址空间其实是一样的,但是内核区的pid和ppid是不一样的,main函数的父进程是该终端源(因为终端本身就是一个进程),而创建的子进程其实是在这个父进程的下面,而父进程又是在终端的下面,
  其次子进程其实是拷贝了父进程,但是子进程和父进程其实是共同用一份内存,只有当父子进程尝试去改变它的时候,才会复制这个地址空间,这个很重要。
也就是读时共享,写时复制






posted @ 2022-10-04 20:07  铜锣湾陈昊男  阅读(8)  评论(0)    收藏  举报