在Linux中,我编译了一个C程序,其中包括system("ps");
我希望当我的程序运行时,系统("ps"(代码打印三个程序。 分别是"bash"、"ps"和"a.out" 但结果是"bash"、"ps"、"a.out"和"sh" 附言
我知道sh和bash是那种贝壳。 但是为什么在我运行程序时添加"sh"?
从man system
:
DESCRIPTION The system() library function uses fork(2) to create a child process that executes the shell command specified in com‐ mand using execl(3) as follows: execl("/bin/sh", "sh", "-c", command, (char *) 0); system() returns after the command has been completed.
system()
函数启动一个 shell 并将command
字符串作为参数传递,以便在 shell 下执行。
因为这就是您使用的函数的作用:
使用参数调用主机环境的命令处理器
command
。
从 Linux 手册页中获取system
:
system()
库函数使用fork(2)
创建一个子进程,该子进程使用以下命令执行命令execl(3)
中指定的 shell 命令,如下所示:execl("/bin/sh", "sh", "-c", command, (char *) NULL);
阅读您使用的函数的文档,尤其是当它们正在执行您意想不到的事情时。这就是文档存在的原因:供您阅读。
使用system
,您不会像execv
那样直接启动一个带有参数的程序/命令,而是会给出一行sh
命令,就像您在该 shell 中手动输入它们一样
因此,例如您可以执行system("date;ps")
正如手册所说system(command)
做到:
execl("/bin/sh", "sh", "-c", command, (char *) 0);
sh
是Bourne shell。您会看到它,因为system
分叉,然后使用参数中提供的命令/bin/sh
。有关更多详细信息,请参见系统的手册页。