问题标签 [vfork]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在 vfork 中,孩子被重复创建
任何人都可以解释以下代码:
在上面的代码中,子进程是重复创建的。谁能帮我理解逻辑?
c - 在函数中调用 vfork(),对结果感到困惑
这是“APUE”第 8 章(练习 8.2,第 2 版)中的练习。全部说明是:
回忆一下图 7.6 中典型的内存排列。因为每个函数调用对应的栈帧通常都存储在栈中,并且因为在 vfork 之后子进程在父进程的地址空间中运行,如果对 vfork 的调用来自除 main 之外的函数并且子进程执行了会发生什么情况在 vfork 之后从这个函数返回?编写一个测试程序来验证这一点,并画出正在发生的事情。
在我的程序中:
我运行程序,输出为:
我对输出感到困惑。
- print
f1 address: xxx,我们调用 vfork() ,子进程首先运行。 - print
f2 address: xxx,然后子进程调用 _exit(0)。 - 主进程从 f1() 返回,f1 的堆栈帧被 f2 更改,可能导致分段错误。
但是为什么要打印f1 address: 4196604两次,为什么 f1 和 f2 的地址不一样呢?
linux - vfork - 暂停调用进程或调用线程?
vfork sayas 的手册页:“vfork - 创建子进程并阻止父进程”在下面的描述“vfork() 与 fork(2) 不同之处在于调用线程被挂起”
在大多数文档中,它说“暂停进程”
那么,哪一个是真的?答案是否取决于 Linux 版本?
感谢 zmau
c - 需要澄清关于 vfork 的使用
我想比父进程更早地运行子进程。我只想使用来自子进程的 execv 调用,所以我使用 vfork 而不是 fork。
但是假设 execv 失败并返回,我想从我正在调用 vfork 的函数中返回非零值。
像这样的东西,
上面的代码是正确的,还是我应该使用其他机制来比父母更早地运行孩子?
在某些链接上,我读过,我们不应该修改通过 vfork 创建的子进程中的任何父资源(我正在修改 err 变量)。
c - 使用 fork(),我怎样才能让子进程总是先运行?
子进程和父进程执行是并行的,首先启动取决于操作系统调度。但是可以做些什么来让孩子总是在父母之前开始呢?
这是我的问题的伪代码,
我想让第一个 execv 先执行,然后父级再次创建新进程。每个 execv 都应该按顺序排列。
c - C 程序中的 fork 与 vfork 功能
我正在做一些自学的C练习,遇到了以下问题:
第一部分:
b部分:
我们必须比较 和 的line a输出line b。
a部分的输出是:
b部分的输出是:
它出现在 a 部分中,总和是 and 的初始声明的总和a,b而在 b 部分中,总和包括子进程内的总和。
我的问题是 - 为什么会发生这种情况?
根据这篇文章:
两者的基本区别在于,当使用 vfork() 创建新进程时,父进程会暂时挂起,子进程可能会借用父进程的地址空间。这种奇怪的事态一直持续到子进程退出或调用 execve(),此时父进程继续。
父进程的定义暂时中止对我来说没有多大意义。这是否意味着对于1b,程序在父进程运行之前一直等到子进程完成运行(因此为什么子进程变量被求和)?
问题陈述还假设“由内核维护的父进程的进程ID为2500,并且新进程是在子进程创建之前由操作系统创建的”。
根据这个定义,这v两个程序的价值是多少?
popen - popen() 实现、fd 泄漏和 vfork()
在 的 glibc 实现中popen(),它指定
popen() 函数应确保在父进程中保持打开的先前 popen() 调用的任何流在新的子进程中关闭。
为什么?如果目的是避免 fd 泄漏,为什么不关闭所有打开的 fd?
popen()使用的 glibc 实现fork()。虽然 and 之间有dup2()andclose()调用fork(),exec()是否可以替换fork()byvfork()来提高性能?
Linux 的实现是popen()基于fork()而不是vfork()?为什么或者为什么不)?
我将编写 的双向版本popen(),它返回两个FILE*:一个用于读取,一个用于写入。如何正确实施?它应该是线程安全的并且没有 fd 泄漏。如果速度快就更好了。
c - Busybox udhcpd vfork 启动两个进程
在我的应用程序中,我需要启动 Busybox udhcpd(dhcp 服务器),代码如下。虽然 udhcpd 确实启动并运行,但我在进程列表中获得了两个版本。udhcpd 运行正常,即为设备分配了 IP 地址。
日志输出
UDHCPD 以 PID 开始:647 (PID=528)
PS输出
现在,如果我查看 /var/run/udhcpd.pid,它的 pid 为 648。在我们代码的另一部分,我们使用与上面相同的代码启动 dhcpcd(dhcp 客户端),它在进程列表中只有一个条目。谁能解释有什么区别,如果我做错了我应该做什么?
问的原因是我需要稍后停止 udhcpd,看来我需要停止使用孩子的 pid (647) 以及从 /var/run/udhcpd.pid (648) 读取的 pid。
linux - vfork() 失败,错误号 513
在基于 RHEL 6.6 的环境中,我们从一个由 XML rpc 服务器创建的线程执行 IO。线程执行执行 vfork() 的外部命令。vfork() 系统调用失败,错误号为 513。
可能的原因是什么?
c - 为什么 vfork() 给出分段错误
当我运行以下代码时
我知道除非调用 exec() 或 _exit() ,否则如果我们尝试修改任何变量,vfork() 可能会以奇怪的方式表现,但有人可以解释一下到底发生了什么吗?为什么 hello world 被打印了 3 次?是因为 printf() 正在缓冲吗?最后为什么当父母试图返回时会发生段错误?