• 进程间通信--fork函数


    #include <unistd.h>

    pid_t fork(void);

    fork() creates a new process by duplicating the calling process.

    1. 一个进程通过调用fork会创建一个被称为子进程的副本。父进程从调用fork()的地方执行,子进程也一样
    2. 子进程是一个新建立的进程,因此有一个与父进程不一样的进程ID。因此可以通过调用getpid()检测自身运行的子进程还是父进程。
    3. 不过,fork函数对父子进程提供不同的返回值--一个进程“进入“fork()调用,而另外一个则从调用中“出来“。父进程得到的fork()调用的返回值是子进程的ID,子进程得到的返回值是0(该点尤为重要). 因为任何进程的ID都不为0,程序可以借此判断自身运行的是那个进程。

     1 // fork.c
     2 #include<stdio.h>
     3 #include<sys/types.h>
     4 #include<unistd.h>
     5 
     6 int main()
     7 {
     8     pid_t child_pid;
     9 
    10     printf("The main process ID is %d
    ", (int)getpid());
    11     child_pid = fork();    // 父子进程同时由此开始执行
    12 
    13     if (child_pid != 0) // fork 调用后,父进程得到子进程的ID,而子进程得到0,所以该处是父进程进入执行
    14     {
    15         printf("[%d]: The process ID is %d
    ", __LINE__, (int)getpid());
    16     }
    17     else
    18     {
    19         printf("[%d]: The process ID is %d
    ", __LINE__, (int)getpid());
    20     }
    21 
    22     printf("[process ID]:%d 此处会调用两次,父子进程都会调用他
    
    ", getpid()); // 此处会调用两次,父子进程都会调用他
    23 
    24     return 0; 
    25 }
  • 相关阅读:
    不忘初心,方得始终
    【读书笔记】Windows核心编程
    工作心得
    2015年随记
    微信开发的黑魔法
    [cssTopic]浏览器兼容性问题整理 css问题集 ie6常见问题【转】
    获取微信用户openid
    Spring Boot应用开发起步
    一种在Java中跨ClassLoader的方法调用的实现
    H5语义化标签
  • 原文地址:https://www.cnblogs.com/xiao13149920yanyan/p/3210872.html
Copyright © 2020-2023  润新知