### 26.1 Running a Command

The easy way to run another program is to use the `system` function. This function does all the work of running a subprogram, but it doesn't give you much control over the details: you have to wait until the subprogram terminates before you can do anything else.

— Function: int system (const char *command)

> Preliminary: | MT-Safe | AS-Unsafe plugin heap lock | AC-Unsafe lock mem | See POSIX Safety Concepts.

> This function executes command as a shell command. In the GNU C Library, it always uses the default shell `sh` to run the command. In particular, it searches the directories in `PATH` to find programs to execute. The return value is `-1` if it wasn't possible to create the shell process, and otherwise is the status of the shell process. See Process Completion, for details on how this status code can be interpreted.

> If the command argument is a null pointer, a return value of zero indicates that no command processor is available.

> This function is a cancellation point in multi-threaded programs. This is a problem if the thread allocates some resources (like memory, file descriptors, semaphores or whatever) at the time `system` is called. If the thread gets canceled these resources stay allocated until the program ends. To avoid this calls to `system` should be protected using cancellation handlers.

> The `system` function is declared in the header file `stdlib.h`.

Portability Note: Some C implementations may not have any notion of a command processor that can execute other programs. You can determine whether a command processor exists by executing `system (NULL)`; if the return value is nonzero, a command processor is available.

The `popen` and `pclose` functions (see Pipe to a Subprocess) are closely related to the `system` function. They allow the parent process to communicate with the standard input and output channels of the command being executed.