或者,更具体地说,它是使用默认的shell,还是实际运行实际的文件。示例:system("echo Hello, World!")
。这是使用Bash运行,还是通过告诉kernal运行命令运行?此外,这是主题吗,还是更适合其他地方?
man system
是您的朋友。这就是我的系统上所说的:
system((库函数使用fork(2(创建一个子函数使用执行命令中指定的shell命令的进程execl(3(如下:
execl("/bin/sh", "sh", "-c", command, (char *) 0);
POSIX对此的看法如下:
system((函数的行为应如同使用fork((创建子进程一样,并且子进程使用execl((调用sh实用程序,如下所示:
execl(<shell path>, "sh", "-c", command, (char *)0);
其中,是sh实用程序的未指定路径名。未指定是否在创建子进程时调用使用pthread_atfork((注册的处理程序。
换句话说,您给它的整个命令都会传递给sh -c
。在Linux上,它总是使用/bin/sh
。在一些发行版上,它将是bash,而其他发行版,如Debian,可能会使用另一个shell。Debian默认情况下使用dash,但允许管理员选择不同的shell,前提是它符合某些条件。