系统子例程

用途

运行 shell 命令。

标准 C 库 (libc.a)

语法

#include <stdlib.h>
int system ( String)
const char *String;

描述

system 子例程将 String 参数作为输入传递到 sh 命令。 然后, sh 命令将 String 参数解释为命令并运行它。

system 子例程调用 fork 子例程来创建一个子进程,该子进程反过来使用 exec l 子例程来运行/usr/bin/sh 命令,用于解释包含在 String 参数中的 shell 命令。 在可信路径上调用时, system 子例程运行可信路径 shell (/usr/bin/tsh)。 当前进程等待直到 shell 完成,然后返回 shell 的退出状态。 使用 sys/wait.h 文件中的结构,以与调用 waitwaitpid 子例程相同的方式返回 shell 的退出状态。

system 子例程忽略 SIGINTSIGQUIT 信号, 并在等待 String 参数指定的命令终止时阻塞 SIGCHILD 信号。 如果这可能导致应用程序错过将杀死它的信号,那么如果命令由于接收到信号而终止,那么应用程序应使用 system 子例程返回的值来执行相应的操作。 system 子例程不影响调用进程的任何子进程的终止状态,除非该进程是由 system 子例程创建的。 在子进程终止之前, system 子例程不会返回。

参数

描述
String 指定有效的 sh shell 命令。
注: system 子例程仅运行 sh shell 命令。 如果 String 参数不是有效的 sh shell 命令,那么结果不可预测。

返回值

成功完成后, system 子例程将返回 shell 的退出状态。 使用 sys/wait.h 文件中的结构,以与调用 waitwaitpid 子例程相同的方式返回 shell 的退出状态。

如果 String 参数是空指针并且命令处理器可用,那么 system 子例程将返回非零值。 如果fork子程序失败或无法获得 shell 的退出状态,系统子程序将返回-1。 如果 exec l 子例程失败,那么系统子例程返回值 127。 在所有情况下, errno 全局变量都设置为指示错误。

错误代码

如果下列任何一项为真,那么 system 子例程将失败:

描述
再次 超出了系统对正在运行的进程总数 (系统范围或单个用户标识) 施加的限制。
EINTR system 子例程被在启动请求的进程之前捕获的信号中断。 在请求的进程开始后,将永远不会返回 EINTR 错误代码。
ENOMEM 存储空间不足。