43得票6回答
execv()和fork()的时间浪费问题

我目前正在学习有关 fork() 和 execv() 的知识,并且对它们的组合效率有疑问。 我被展示了以下标准代码:pid = fork(); if(pid < 0){ //handle fork error } else if (pid == 0){ execv("s...

43得票4回答
具体来说,fork()在Linux中如何处理由malloc()动态分配的内存?

我有一个有父进程和子进程的程序。在fork()之前,父进程调用了malloc()并用一些数据填充了一个数组。在fork()之后,子进程需要这些数据。我知道可以使用管道,但是以下代码似乎也能工作:#include <stdio.h> #include <stdlib.h>...

43得票1回答
WEXITSTATUS(status)返回什么?

我正在尝试理解 WEXITSTATUS(status) 的工作原理。我遇到了一段代码,其中WEXITSTATUS(status)的返回值被添加到一个变量中。 以下是代码片段:waitpid(-1, &status, 0); counter += WEXITSTATUS(status)...

42得票14回答
为什么fork()函数能够按照它的方式工作

所以,我使用了fork(),并且知道它的作用。作为一个初学者,我对它感到很害怕(而且我仍然没有完全理解它)。在网上可以找到的fork()的一般描述是,它会复制当前进程并分配不同的PID、父PID,并且该进程将具有不同的地址空间。这都很好,然而,根据这个功能描述,一个初学者会想知道“为什么这个函...

41得票6回答
fork()和vfork()有什么区别?

fork()和vfork()有什么区别?vfork()是否像fork()一样返回?

40得票2回答
在一个分叉进程中,套接字连接是如何处理的?

我有一个作为TCP服务器的程序,它监听端口5000。 现在我想要运行另一个命令行进程与这个服务器并行运行。我知道正确的方法是fork服务器,然后调用“exec”.... 我的问题是,子进程是否也“拥有”此端口5000?如果我想释放此端口5000,是否需要杀死父进程和子进程? 我很好奇这个...

39得票2回答
在fork()之后,寻求关于“文件描述符”的简单说明。

在《Unix环境高级编程》第二版的第8.3节“fork函数”中,有这样一段描述: “父进程和子进程必须共享相同的文件偏移量。考虑一个进程,它派生了一个子进程,然后等待子进程完成。假设两个进程在正常处理中都会写入标准输出。如果父进程将其标准输出重定向到某个文件(比如通过 shell),那么当子...

38得票4回答
调用fork时,线程会被复制吗?

如果我在一个运行着线程的程序中,在Unix系统上调用fork(),那么这些线程会被复制吗?我知道当前进程的虚拟内存会1:1地复制到新生成的进程中。我也知道每个线程在进程的虚拟内存中都有自己的栈。因此,至少线程的栈应该被复制。但是,我不知道是否还有其他一些线程相关的内容并没有驻留在虚拟内存中,因...

36得票3回答
在Linux fork过程中防止文件描述符的继承

如何防止文件描述符在fork()系统调用中被复制继承(当然不能关闭它)? 我正在寻找一种方法标记单个文件描述符,在fork()时不被子进程(复制)继承,类似于FD_CLOEXEC的黑科技,但适用于forks(因此如果您喜欢,可以使用FD_DONTINHERIT功能)。有人做过这个吗?或者研究...

36得票3回答
waitpid()的使用示例是什么?

我知道waitpid()函数是用来等待进程结束的,但是如何精确地使用它呢? 这里我的需求是创建两个子进程,等待第一个子进程退出后杀死第二个子进程,再退出。//Create two children pid_t child1; pid_t child2; child1 = fork(); /...