这是我正在努力实现的一些伪代码:
叉
在子文件中,dup2输出描述符到文件然后执行不同的程序 在父母身上,在一段时间后杀死孩子问题是虽然我杀了孩子之后输出文件是空的,即使孩子在某个阶段写了它。我究竟做错了什么?我不想等待孩子,但我也不希望它反转它已写入文件的内容。
答案 0 :(得分:2)
如果您的孩子因信号而死亡,它将不会刷新任何缓冲区,这就是您没有看到任何输出的原因。有这个解决方案
当然,第三种选择是相当愚蠢的:发信号通知父母的孩子可以简单地退出。
修改强> 根据编辑过的问题和评论
stdio
(printf,fwrite等),出于I / O效率的原因,使用了一些缓冲区。也就是说,当您执行简单的写操作时,低级操作不会立即发生。数据被复制到某个缓冲区,之后,当库认为有必要时(完整缓冲区或其他东西),缓冲区将被刷新 - 将写入内容。
现在,当程序调用{{1}}(正常进程终止)时,发生的事情就是刷新exit(3)
个缓冲区。如果程序因信号而死亡,则不会刷新stdio
个缓冲区,操作系统只会声明内存。
如果您无法控制程序stdio
(比如说你是一个shell),你就不能确定如果你杀了他们就会做他们的事情。也就是说,这不是你的责任。但是,如果你做控制它们(你说了一些关于管道的东西),你可以简单地通过管道发出一些序列,让孩子们调用exec
。