美文网首页
fork()函数

fork()函数

作者: 踩在浪花上00 | 来源:发表于2016-11-04 00:43 被阅读0次

fork函数是计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。

fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。

函数原型

pid_t fork( void);

(pid_t 是一个宏定义,其实质是int 被定义在#include中)

返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

函数说明

一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。

子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。

UNIX将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main(void)

{

int n = 0;

char caBuf[32] = {'\0'};

pid_t pid = 0;

pid = fork();

if (pid > 0)

{

/*parent*/

n = 3;

strcpy(caBuf, "parent:");

//getpid(): 获得自己的进程号

printf("parent:parentPid = %d\n", getpid());

printf("parent:childPid = %d\n", pid);

}

else if (0 == pid)

{

/*child*/

n = 9;

strcpy(caBuf, "child:");

//getppid(): 获得父进程的进程号

printf("child:parentPid = %d\n", getppid());

printf("child:childPid = %d\n", getpid());

}

else if (-1 == pid)

{

/*parent*/

printf("errno:%d, err:%s\n"

, errno, strerror(errno));

exit(-1);

}

//父子进程都要执行

for (; n >= 0; n--)

{

printf("%s %d\n", caBuf, n);

sleep(1);

}

return 0;

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

相关文章

  • fork() 与exec()的区分

    一、fork函数详解 函数原型: #include pid_t fork(void); fork函数是对整个进程进...

  • linux中fork()函数详解 (阅读笔记)

    linux中fork()函数详解(转载) 一、fork入门知识 在Linux中fork函数是非常重要的函数,它的作...

  • 系统编程:fork()、exec()前用fflush()刷新缓冲

    一、fork函数的使用异常 有一fork函数使用示例如下: 根据fork函数功能,我们可以在控制台上输出以下内容:...

  • Redis AOF重写的实现原理

    1. 操作系统基础 1.1. fork 当我们在一个程序的函数中调用 fork 函数时,fork 函数会创建一个子...

  • fork()函数

    fork函数是计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记...

  • fork函数

    含义fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这...

  • linux创建进程fork的方法步骤

    fork创建进程 函数原型如下 #include//必须引入头文件,使用fork函数的时候,必须包含这个头文件,否...

  • python 杂记

    进程 fork()函数Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用...

  • 一、多进程操作的基本函数

    1.fork 函数头文件及函数原型#include pid_t fork(void); 在Linux中创建一个新...

  • 分析Linux内核创建一个新进程的过程

    .ret_from_fork 分析fork函数对应的系统调用处理过程 启动保护fork命令的menuOS 设置断点...

网友评论

      本文标题:fork()函数

      本文链接:https://www.haomeiwen.com/subject/ndmiuttx.html