APUE(一)FORK机制

本文详细解析了fork系统调用的工作原理,包括如何通过fork创建子进程、父子进程间的区别及联系,以及fork调用看似返回两次的现象背后的真正原因。此外还探讨了与缓存相关的细节,解释了为什么fork前的输出会在没有换行符的情况下被重复打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

chapter1:

1.调用fork创建一个新进程,新进程是调用进程的一个副本,调用进程为"父进程",创建的进程为“子进程”,fork对父进程返回子进程的进程id,对子进程返回0。fork创建一个新进程,被调用一次,返回两次(父进程一次子进程一次)。

chapter8:

  • fork并没有真正的返回两次,它依然返回了一次,只是OS对fork进行的操作使得我们看起来它返回了两次而已。系统调用fork()创建新进程后,在进程表里新建了一个新的表项,生成的子进程志父进程完全是相对独立的进程,生成子进程后会给父进程返回一个下整数。子进程在之后被调度,会得到一个为0的返回值,这个过程是两个进程来自于同一程序的两次执行。
  • fork之前的printf("xxxxx")没有加换行符会将输出内容重复输出一遍的原因:
    因为这是 带缓存 的I/O,而缓存类型如果是连到终端设备,就是 行缓存 的,反之是全缓存。因为是行缓存,又因为这里没有了换行符,又又因为在fork之前一没有换行符二没有什么能让缓冲区满的语句,所以缓存中的数据在fork之前不会输出到终端 ,所以复制给子进程的缓存中就包含了before fork。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值