[Linux]Linux子进程的执行起点 | 祭夜博客
  • 欢迎光临,这个博客颜色有点多

[Linux]Linux子进程的执行起点

Wordpress msojocs 2年前 (2021-11-08) 1122次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

程序

#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <sys/param.h>

int main(void){
    printf("main pid: %d\n-------------\n", getpid());
    printf("\n------main do fork1------\n\n");
    int pid = fork();
    printf("fork1 result: %d\n", getpid());
    if(pid > 0){
        // 父进程
        printf("main thread current pid: %d\n\n", getpid());
        exit(0);
    }else{
        // 子进程
        printf("child1 pid: %d\n", getpid());

        pid_t sid = setsid();

        printf("\n------child1 do fork2------\n\n");
        pid = fork();
        printf("fork2 result: %d\n", getpid());
        if(pid == 0){
            printf("child2 pid: %d\n", getpid());
        }else{
            printf("child1 pid: %d\n", getpid());
        }
        exit(0);
    }
}

 

结果分析

[Linux]Linux子进程的执行起点

可以看出:

  1. fork上一语句都只执行了一次
  2. fork下一语句执行两次

结论

子进程执行起始位置应为fork语句下一行为或fork所在行;

但是,由于fork result不同,所以是fork所在行。


祭夜の咖啡馆 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[Linux]Linux子进程的执行起点
喜欢 (1)
[1690127128@qq.com]
分享 (0)

您必须 登录 才能发表评论!