【发布时间】:2020-10-01 21:19:25
【问题描述】:
我正在研究 Apple 在 https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/popen.c.auto.html 上对 popen() 的实现,并注意到他们使用的是 execl(_PATH_BSHELL, "sh", "-c", command, NULL) 而不是 execl(_PATH_BSHELL, command, NULL)。
为什么要(或应该)执行可执行文件,例如a.out 通过sh -c 而不仅仅是可执行文件本身?
如果您执行sh -c a.out 而不仅仅是a.out 本身,那么实际的a.out 进程最终会成为“孙”进程而不是子 进程吗?
【问题讨论】: