Message334269
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 |
|
Date |
User |
Action |
Args |
2019-01-23 18:29:45 | izbyshev | set | recipients:
+ izbyshev, gregory.p.smith, vstinner, serhiy.storchaka, koobs, pablogsal, nanjekyejoannah, kevans |
2019-01-23 18:29:44 | izbyshev | set | messageid: <1548268184.32.0.157955807934.issue35537@roundup.psfhosted.org> |
2019-01-23 18:29:44 | izbyshev | link | issue35537 messages |
2019-01-23 18:29:44 | izbyshev | create | |
|