问题标签 [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 永无止境
下面的代码永远不会结束。这是为什么?
更新:
这段代码只是为了说明我对vfork()
. 似乎当我使用时vfork()
,子进程不会复制父进程的地址空间。相反,它共享地址空间。在这种情况下,我希望两个进程都更新 nums 数组,我的问题是按什么顺序?操作系统如何在两者之间同步?
至于为什么代码永远不会结束,可能是因为我没有明确的退出_exit()
或声明。exec()
我对吗?
UPDATE2:
我刚读到:56. fork() 和 vfork() 系统调用之间的区别?
我认为这篇文章可以帮助我解决我的第一个困惑。
来自 vfork() 系统调用的子进程在父进程的地址空间中执行(这可以覆盖父进程的数据和堆栈),这会挂起父进程直到子进程退出。
c - 为什么 vfork() 会导致父进程崩溃(段错误)?
vfork 可以改变父进程中的变量,但是为什么不能增加栈呢?
f2() 导致崩溃。
如果我将 vfork() 更改为 fork(),则不会发生崩溃。
c - 带有 gcc -O2 的 vfork() 似乎有错误的结果。
我从 APUE 拿了代码。在 Ubuntu 12.04 中,如果我在没有任何优化的情况下使用 gcc,我将得到与本书相同的结果:
如果我使用 gcc -O2,那么 var 将为 88。这是因为 gcc 优化会使用 vfork() 做一些事情吗?
linux - 如何使用 vfork 创建多个进程?
这是 vfork() 的程序。该程序创建多个父子进程并在最后返回-1(意味着操作系统无法创建另一个进程)。为什么会发生这种行为?
c - 如何知道 vfork 函数中的父进程或子进程
我想知道我们是否使用 vfork,我们如何知道子进程或父进程,因为资源是共享的。更具体地说,假设以下代码:
在上面的代码中,如果资源是共享的,那么 pid 变量将具有 uniqe 值,那么这段代码是否有效?,因为我已经看到示例按照上述代码执行操作。
c - 调用 vfork 后的奇怪输出
程序的输出如下:
子进程:0
0
父进程:6958
子进程:0
分段故障
据我所知,除非调用 exec 或 exit 函数并且共享堆栈段,否则 vfork 将暂停父进程。所以在这里我有两个问题:
由于它们共享一个公共地址空间,exit(0) 会影响两个进程吗?如果是这样,怎么做?如果不是,为什么?
为什么“父进程:6958”后面有一行“子进程:0”?我不期望像意外行为这样的答案。
此外,通过反汇编,我注意到 vfork 的调用不像正常函数那样表现。没有堆栈平衡:函数 vfork 的汇编代码转储:
它实际上将返回地址弹出到 ecx 并在系统调用后推回 (0xb7ed206e <+30>: int 0x80 0xb7ed2070 <+32>: push ecx)。最不寻常的是有一条ret指令:0xb7ed2083 <+51>: ret
我对汇编语言不熟悉,谁能给我解释一下?
c - 当我调用 vfork() 时,我可以调用任何 exec*() 函数,还是必须调用 execve()?
该
vfork()
函数与 具有相同的效果fork(2)
,除了如果进程 [...] 在成功调用 [...]exec(3)
函数族之一之前调用任何其他函数,则行为未定义。
这表明exec*()
之后调用任何函数vfork()
都是可以接受的。但是,稍后在手册页中具体说明:
特别是,程序员不能依赖父级保持阻塞,直到子级 [...] 调用
execve(2)
[...]。
execve(2)
在手册页中重复使用,它的用法表明它是唯一exec
可以在vfork()
.
那么为什么execve
在这里被挑出来,我可以安全地调用其他exec
类型的函数(如execlp
)吗?
c++ - 基本 fork() 程序返回 seg 错误或浮动 pt 异常
我已经尝试了 fork() 和 vfork() 并得到了一个带有 fork 的 float pt excep 和一个带有 vfork 的 seg 错误。当我使用 vfork() 时,没有明显的原因,它会退出子进程,但不会进入父进程,然后出现 seg 错误。当我使用 fork() 时,它进入父级,但给了我一个 float pt 异常。有任何想法吗?
c - vfork() 隐式声明
我使用 vfork() 在 C 中工作。我的程序运行良好,但我对隐式声明有警告。
我的代码:
我的警告是:
函数'vfork'的隐式声明[-Wimplicit-function-declaration] if(vfork()==0){^
我包括那些:
如果我使用 fork() 而不是 vfork() 警告消失了。Soo 问题只是我程序中的 vfork() 。我不知道这是什么意思或我如何解决这个问题。