gpt4 book ai didi

c - 为什么一个 exec "sh -c a.out"而不是 a.out 本身?

转载 作者:行者123 更新时间:2023-12-04 08:49:10 24 4
gpt4 key购买 nike

我正在研究苹果对 popen() 的实现在 https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/popen.c.auto.html并注意到他们做 execl(_PATH_BSHELL, "sh", "-c", command, NULL)而不是 execl(_PATH_BSHELL, command, NULL) .
为什么要(或应该)执行可执行文件,例如a.out通过 sh -c而不仅仅是可执行文件本身?
如果你执行 sh -c a.out而不仅仅是 a.out本身,是否实际a.out进程最终成为“孙子”进程而不是子进程?

最佳答案

Why would you want to (or should you) exec an executable, e.g. a.out via sh -c instead of just the executable itself?

popen()旨在运行包含 shell 语法的 shell 命令,如 >重定向, |管道和 &&命令链。它需要通过 sh -c 传递字符串为了支持这些结构。如果没有,这些句法特征将作为参数逐字传递给相关程序。
例如, popen("make clean && make")应该触发两个 make调用。无 sh -c它会调用 make一次带有三个参数,就好像一个已经输入一样
$ make clean '&&' make
在终端。

If you exec sh -c a.out instead of just a.out itself, does the actual a.out process end up being a "grandchild" process and not a child process?


对,那是正确的。会有 sh当前进程和 a.out 之间的进程.

关于c - 为什么一个 exec "sh -c a.out"而不是 a.out 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64163331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com