为什么在string中使用多于字节的write(2)会使subprocess保持打开状态?

我不得不为我的操作系统类实现一个shell。 我用一些string写了(2),写成“写这个”到STDOUT,并写了比我想写的string更大的字节长度,比如说20。 我阅读手册页,在我看来,使用更大的数字将是罚款。

然后我分手,在父母等待,并使用execve(2)在一些input,而在孩子。 这应该退出孩子,无论成功或失败,但为了以防万一,我把一个exit()命令之后。

父母在分岔之前设置了一个警报,如果execve花了很长时间才能完成,则使用SIGINT来杀死孩子。

这一切都在一个循环。

我发现我的孩子通过打印debugging在某处保持打开状态,然后进入循环的顶部。 当我修复我的写(2),以便我使用正确的字节数,我的输出string,我发现问题已经修复。 为了清楚我的警报,分叉,执行和其他一切工作正常,导致孩子们保持开放的唯一原因是写入的字节数不正确(2)。

是什么导致了这种行为 我写不出任何写在(2)手册页或其他可能表明,除了可能与父母的子共享文件描述符,但我不知道这是否是所有相关的。