On Friday 13 March 2015 18:11:32 Thiago Macieira wrote: > On Friday 13 March 2015 14:51:47 Andy Lutomirski wrote: > > In any event, we should find out what FreeBSD does in response to > > read(2) on the fd. > > I've just successfully installed FreeBSD and compiled qtbase (main package > of Qt 5) on it. > > I'll test pdfork during the weekend and report its behaviour.
Here are my findings about pdfork. Source: http://fxr.watson.org/fxr/source/kern/sys_procdesc.c?v=FREEBSD10 Qt adaptations: https://codereview.qt-project.org/108561 Processes created with pdfork() are normal processes that still send SIGCHLD to their parents. The only difference is that you get the extra file descriptor that can be passed to the pdgetpid() system call and works on select()/poll(). Trying to read from that file descriptor will result in EOPNOTSUPP. Since they've never implemented pdwait4() (it's not even declared in the headers), the only way to reap a child if you only have the file descriptor is to first pdgetpid() and then call wait4() or wait6(). If you don't pass PD_DAEMON, the child process gets killed with SIGKILL when the file closes. Conclusion: Pros: this is the bare minimum that we'd need to disentangle the SIGCHLD mess. As long as all child process activations use this feature, the problem is solved. Cons: it requires cooperation from all child starters. If some other library or the application installs a global SIGCHLD handler that waits on all child processes, like libvlc used to do and Glib and Ecore still do, you won't be able to get the child exit status. I have not tested what happens if you try to pass the file descriptor to other processes (can you even do that on FreeBSD?). But even if you could and got notifications, you couldn't wait on the child to get its exit status -- unless they implement pdwait4. - pdfork: can be emulated with clone4 + CLONE_FD (+ CLONEFD_KILL_ON_CLOSE) - pdwait4: can be emulated with read() - pdgetpid: needs an ioctl - pdkill: needs an ioctl [or just write()] -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/