Linux中父进程和子进程关系讲解

先上代码:

#include <stdio.h>
#include <unistd.h>

int main()
{
    
    
    printf("--------begin------\n");
    pid_t ret = fork();
    if(ret < 0)
    {
    
    
        perror("fork");
        return 0;
    }
    else if(ret > 0)
    {
    
    
        //father
        while(1)
        {
    
    
            printf("i am father abcdef\n");
            sleep(1);
        }
    }
    else
    {
    
    
        while(1)
        {
    
    
            printf("i am child 123456\n");
            sleep(1);
        }
    }
    return 0;
}

pid_t getpid(void); 谁调用获取谁的进程pid
pid_t getppid(void); 谁调用获取谁的父进程pid
整体流程如下
在这里插入图片描述
输入ps aux | grep ./test查看进程控制信息:
在这里插入图片描述
  能看到有两个进程正在运行,但是看不出来两进程中的差异和联系,因此输入ps -ef,输入后能看到当前进程的PID和当前进程的父进程PPID。通过这两个数字信息我们可以确定父进程和子进程。
我们进行过滤查看我们想看的,ps -ef | grep ./test
在这里插入图片描述
其中第二列为当前进程,第三列为当前进程的父进程。
从上图容易看到20178为我们当前创建的进程,父进程为20177。
查看父进程的父进程,ps aux | grep 19583结果如下:
在这里插入图片描述
由图可以知道父进程的父进程是终端处理器bash(命令行解释器)。
一旦创建出来子进程之后,父进程和子进程就是抢占式执行;

猜你喜欢

转载自blog.csdn.net/aaaaauaan/article/details/107827227