Mut*_*han -1 c linux fork semaphore segmentation-fault
对于我之前关于分段错误的问题,我得到了非常有用的答案.谢谢那些已经回复的人.
#include<stdio.h>
main()
{
printf("hello");
int pid = fork();
wait(NULL);
}
Run Code Online (Sandbox Code Playgroud)
输出:hellohello.
在此,子进程从头开始执行.如果我没有错,那么如果我把sem_open放在fork()之前程序是如何工作的(ref答案:prev questions)
我需要一个关于分段故障的清晰解释,这种故障偶尔发生而不是总是发生 为什么不总是...如果编码中有任何错误,那么它应该始终正确...?
fork创建进程的克隆.从概念上讲,父母的所有状态也最终都在孩子身上.这包括:
因此......你的程序不会从任何地方"开始运行"......你所调用的所有状态都fork将传播给孩子.孩子将fork像父母一样返回.
至于你在fork之后可以做些什么...我不确定POSIX说的是什么,但是我不会依赖信号量做出正确的事情fork.您可能需要进程间信号量(请参阅man sem_open或pshared参数sem_init).根据我的经验,跨进程信号量在免费的Unix类型操作系统上并没有得到很好的支持......(例如:ENOSYS如果你试图创建一个BSD,它们总会失败.)
@GregS在fork之后提到了重复的"hello"字符串.他说stdio(即FILE*)将在用户空间内存中缓冲,并且a fork导致字符串在两个进程中缓冲是正确的.您可能希望在调用之前调用fflush(stdout); fflush(stderr);并刷新任何其他重要FILE*句柄fork.
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |