c语言 - 名为"sh"的进程是什么



在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。有关更多详细信息,请参见系统的手册页。

最新更新