Linux-----进程处理(子进程创建)

发布于:2025-02-11 ⋅ 阅读:(71) ⋅ 点赞:(0)

 【尚硅谷嵌入式Linux应用层开发,linux网络编程,linux进程线程,linux文件io】https://www.bilibili.com/video/BV1DJ4m1M77z?p=35&vd_source=342079de7c07f82982956aad8662b467

main函数

fork创建进程

fork()参数 

/**
 * @brief 创建一个子进程(相当于复制,包括内存空间)
 * void: 不需要填写参数
 *  
 * @return pid_t pid_t(int值) 
 *  (1) 在父进程中 返回子进程的PID
 *  (2) 在子进程中 返回0
 *  (3) 发生错误 返回-1
 */
pid_t fork(void);

getpid()   获取进程PID 

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

/**
 * @brief 返回调用进程的PID
 * 
 * @return pid_t 不会失败,必然返回进程PID
 */
pid_t getpid(void);

 getppid()   获取父进程PID

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

/**
 * @brief 返回调用进程父进程的PID
 * 
 * @return pid_t 不会失败,必然返回父进程PID,即PPID
 */
pid_t getppid(void);

代码案例

getpid()查看进程号

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

int main(void) {

    //调用fork之前代码都是在父进进行的
    printf("君不见黄河之水天上来,奔流到海不复回_%d\n",getpid());


    // 使用fork创建子进程

    while (1)
    {
        /* code */
    }
    
    return 0;
}

fork()创建子进程

fork() 之后的代码都是在父子进程中各自执行一次的

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

int main(void) {

    //调用fork之前代码都是在父进进行的
    printf("父进程PID:%d\n", getpid());
    


    // 使用fork创建子进程
    /* 不需要传参
    return int 进程号
    (1) -1出错
    (2) 父进程中表示子进程PID
    (3) 子进程中显示0
    */

    // fork() 之后的代码都是在父子进程中各自执行一次的
    pid_t pid = fork();
    printf("子进程PID:%d\n", pid);

    while (1)
    {
        /* code */
    }
    
    return 0;
}

条件判断使得父子进程执行各自对应的代码

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

int main(void) {

    //调用fork之前代码都是在父进进行的
    printf("父进程PID:%d\n", getpid());
    
    // 使用fork创建子进程
    /* 不需要传参
    return int 进程号
    (1) -1出错
    (2) 父进程中表示子进程PID
    (3) 子进程中显示0
    */

    // fork() 之后的代码都是在父子进程中各自执行一次的
    pid_t pid = fork();
    // printf("子进程PID:%d\n", pid);

    if (pid < 0) {
        perror("getpid");
    }
    else if (pid==0)
    {
        printf("子进程:新的子进程:%d, 其父进程:%d\n", getpid(), getppid());
    }
    else {
        printf("父进程: 父进程%d,创建了进程%d\n", getpid(), pid);
    }

    while (1)
    {
        /* code */
    }
    
    return 0;
}