进程与线程相关(一)

程序和进程

       程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁....)

       进程:是一个抽象的概念,指程序在计算机中的一次执行过程,进程是一个动态的过程描述,占有计算机的资源,有一定的生命周期,在内存上执行。

       并发:在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之间的状态。但任一个时刻点上仍只有一个进程在运行,各个进程相互争夺CPU时间片。

       并行:多个计算机核心在同时处理多个任务,这多个任务间是并行关系

进程的创建流程
        1.用户空间运行一个程序,发起进程的创建
        2.操作系统接受用户申请,开启进行创建
        3.操作系统分配计算机资源,确定进程状态
        4.将新创建的进程交给用户(应用层)使用

创建进程的函数

        fork()函数:创建一个子进程。

        pid_t fork(void);        失败返回-1;成功返回:① 父进程返回子进程的ID(非负)     ②子进程返回 0

        pid_t类型表示进程ID,但为了表示-1,它是有符号整型。(0不是有效进程ID,init最小,为1)

        注意返回值,不是fork函数能返回两个值,而是fork后,fork函数变为两个,父子需【各自】返回一个。

        系统调用fork()函数允许一个进程(父进程)创建一个新的进程(子进程),具体的做法是,新的子进程几近于对父进程的翻版:子进程获得父进程的栈,数据段,堆和执行文本段的拷贝,可将此视为把父进程一分为二,fork也因此得名。

demo1: 简单的进程创建

#include <stdio.h>
 
#include <unistd.h>
 
#include <stdlib.h>
 
 
int var = 34;
 
int main(void){
 
    pid_t pid;
 
    pid = fork();
 
    if (pid == -1 ) {
 
        perror("fork");
 
        exit(1);
 
    } else if (pid > 0) {
 
        sleep(2);
 
        var = 55;
 
        printf("I'm parent pid = %d, parentID = %d, var = %d\n", getpid(), getppid(), var);
 
    } else if (pid == 0) {
     
        var = 100;
 
        printf("child pid = %d, parentID=%d, var = %d\n", getpid(), getppid(), var);
 
    }
 
    printf("var = %d\n", var);
 
    return 0;
 
}

 

发布了36 篇原创文章 · 获赞 15 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章