Alexey Izbyshev <izbys...@ispras.ru> added the comment:
Another problem with posix_spawn() on glibc: it doesn't report errors to the parent process when run under QEMU user-space emulation and Windows Subsystem for Linux. This is because starting with commit [1] (glibc 2.25) posix_spawn() relies on address space sharing semantics of clone(CLONE_VM) to report errors, but it's not implemented in QEMU and WSL, so clone(CLONE_VM) and vfork() behave like fork(). See also [2], [3]. This can be easily demonstrated: $ cat test.c #include <spawn.h> int main(int argc, char *argv[], char *envp[]) { return posix_spawn(0, "non-existing", 0, 0, argv, envp); } $ gcc test.c $ ./a.out $ echo $? 2 $ aarch64-linux-gnu-gcc -static test.c $ qemu-aarch64 ./a.out $ echo $? 0 There is no problem with musl (it doesn't rely on address space sharing). [1] https://sourceware.org/git/?p=glibc.git;a=commit;h=4b4d4056bb154603f36c6f8845757c1012758158 [2] https://bugs.launchpad.net/qemu/+bug/1673976 [3] https://lists.gnu.org/archive/html/qemu-devel/2017-11/msg04890.html ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue35537> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com