进程

1. 进程

进程的描述

a.进程是一个正在运行的程序

b.每个进程都有一个进程控制块,PCB

c.进程进程控制块是用一个结构体struct task_struct 来实现

一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。

    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

fork 创建进程,返回值为0是子进程,返回值大于0为父进程(返回值的数值是子进程id),返回值为负数表示fork失败。

用fork创建进程的例子如下:

[root@localhost linux]# vim fork_process.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>

int main ()
{
        char * process_name = NULL;
        int n, i;
        pid_t id = fork();
        if (id == 0)
        {
                process_name = "child ";
                n = 2;
        }
        else
        {
                process_name = "parent ";
                n = 5;
        }

        for ( i = 0; i < n; i++)
        {
                printf("process=%s pid=%d ppid=%d n=%d \n", process_name,getpid(),getppid(),n);
                sleep(2);
        }
}

编译:gcc -o fork_process fork_process.c

运行结果:

[root@localhost linux]# ./fork_process
process=parent  pid=25934 ppid=1312 n=5
process=child  pid=25935 ppid=25934 n=2
process=parent  pid=25934 ppid=1312 n=5
process=child  pid=25935 ppid=25934 n=2
process=parent  pid=25934 ppid=1312 n=5
process=parent  pid=25934 ppid=1312 n=5
process=parent  pid=25934 ppid=1312 n=5

如上结果可知:

当fork 返回值为0时,执行子进程,n 的值为2输出两次,执行父进程时n的值为5执行5次。

从pid和ppid 可以看出父进程的id和子进程的id

原文地址:https://www.cnblogs.com/y15821933792/p/15800243.html