在Linux中,system()函数的工作原理是什么?

8

我一直在阅读它的手册,但还没有成功地弄清楚它是如何工作的。调用system()函数时,会fork出一个新的子进程并在其中执行shell二进制文件吗?虽然这可能是一个愚蠢的猜测。

2个回答

11

是的,system() 实质上是一个 fork() 和 exec() "sh -c" 用于传递命令字符串。可以在这里找到一个示例实现(来自最近从glibc分支出的 eglibc)这里


system() 在2021年已经被posix_spawn所取代。 - asxxawwqqqas

2

是的,system("foo bar") 等同于 execv("/bin/sh", ["sh", "-c", "foo bar"])。


2
Posix 要求 system() 忽略 SIGINT 和 SIGQUIT 信号并阻塞 SIGCHLD 信号。 - Bastien Léonard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接