[Linux]Linux子进程的执行起点 | 祭夜の咖啡馆
  • 公告

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

Wordpress 祭夜 4周前 (11-08) 64次浏览 已收录 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子进程的执行起点
喜欢 (0)
[1690127128@qq.com]
分享 (0)
发表我的评论
取消评论
OwO表情
贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址