#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,程序可以借此判断自身运行的是那个进程。

 // fork.c
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h> int main()
{
pid_t child_pid; printf("The main process ID is %d\n", (int)getpid());
child_pid = fork(); // 父子进程同时由此开始执行 if (child_pid != ) // fork 调用后,父进程得到子进程的ID,而子进程得到0,所以该处是父进程进入执行
{
printf("[%d]: The process ID is %d\n", __LINE__, (int)getpid());
}
else
{
printf("[%d]: The process ID is %d\n", __LINE__, (int)getpid());
} printf("[process ID]:%d 此处会调用两次,父子进程都会调用他\n\n", getpid()); // 此处会调用两次,父子进程都会调用他 return ;
}

进程间通信--fork函数的更多相关文章

  1. 进程控制之fork函数

    一个现有进程可以调用fork函数创建一个新进程. #include <unistd.h> pid_t fork( void ); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回- ...

  2. 从一段代码看fork()函数及其引发的竞争

    首先来看一段从<UNIX环境高级编程>中摘录的一段很有意思的代码.借此我们再来谈谈fork()函数的一些问题. #include "apue.h" static voi ...

  3. 进程管理之fork函数

    fork函数的定义 #include <unistd.h> #include <sys/types.h> pid_t fork(void); fork函数在父进程中返回子进程的 ...

  4. linux多进/线程编程(2)—— fork函数和进程间“共享”数据

    参考: 1.博客1:https://www.pianshen.com/article/4305691855/ fork:在原进程的基础上"分叉"出一个子进程,即创建一个子进程. N ...

  5. Linux C 中 fork() 函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...

  6. Fork函数初识

    fork函数用于创建子进程,典型的调用一次,返回两次的函数.其中调用进程返回子进程的PID,而子进程则返回0.但是两个进程的执行顺序是不定的. fork函数调用完成以后父进程的虚拟存储空间被拷贝给了子 ...

  7. fork()函数详解

    原文链接:http://blog.csdn.net/jason314/article/details/5640969  一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函 ...

  8. fork函数

    在Unix/Linux中用fork函数创建一个新的进程.进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程.该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程. ...

  9. Linux—fork函数学习笔记

    fork()函数 在赋值语句pid = fork();之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的代码部分完全相同.> 两个进程中,原先就存在的那个被 ...

随机推荐

  1. JS OOP编程

    //父类 function BaseFun() { var hello = "HelloWorld"; this.HelloPublic = "Hello--World& ...

  2. ISS_1建站使其能够用ipad浏览器下载安装x-code开发的程序

    一:第一种方法 1:把ipa上传到一个https类型的网站比如:https://worktile.com 2:更改plist中urrl <?xml version="1.0" ...

  3. 转:如何实现一个malloc

    如何实现一个malloc 转载后排版效果很差,看原文!   任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉. ...

  4. Table样式

    .tb_org th { background-color: #; color: #ffffff; } .tb_org { border-right: 1px solid silver; border ...

  5. 【High-Speed and Accurate Laser Scan Matching Using Classified Features】

    所谓的"分类特征",就是把特征分成 1. 旋转特征:用直线表示 2. 平移特征,用撕裂点和临界点表示 最大的创新点 应该就是下面的分组吧 匹配的时候,用RANSAC 或者动态规划, ...

  6. Failed: error processing document #281: unexpected EOF,往MongoDB当中插入json文件时出现的错误。

    往MongoDB当中插入json文件时提示的错误(我的操作系统是win10): 当时的执行命令是:mongoimport -d test -c restaurants d://primer-datas ...

  7. Michael Schatz - 序列比对课程

    Michael Schatz - Cold Spring Harbor Laboratory 最近在研究 BWA mem 序列比对算法,直接去看论文,看不懂,论文就3页,太精简了,好多背景知识都不了解 ...

  8. matplotlib总结

    主要使用matplot.pyplot import matplot.pyplot as plt plt.figure(1) plt.subplot(211) plt.plot(x,y, 'rs') p ...

  9. mac下安装nginx+php+mysql+xdebug

    一,安装homebrew 就像linux下面有yum一样,mac也有个homebrew,管理软件非常便捷. 官网:http://brew.sh/index_zh-cn.html 上面有句命令,复制下来 ...

  10. MySQL DML 整理

    DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects. 由D ...