SYSTEM(3) | Library Functions Manual | SYSTEM(3)

# NAME

`system` — pass a command to the shell

# SYNOPSIS

`#include <stdlib.h>`

int
`system`(const char *string);

# DESCRIPTION

The `system`() function hands the argument string to the command interpreter sh(1). The calling process waits for the shell to finish executing the command, ignoring `SIGINT` and `SIGQUIT`, and blocking `SIGCHLD`.

If string is `NULL`, `system`() will return non-zero. Otherwise, `system`() returns the termination status of the shell in the format specified by waitpid(2).

Note that fork handlers established using pthread_atfork(3) are not called when a multithreaded program calls `system`().

# RETURN VALUES

If a child process cannot be created, or the termination status of the shell cannot be obtained, `system`() returns -1 and sets errno to indicate the error. If execution of the shell fails, `system`() returns the termination status for a program that terminates with a call of `exit`(127).

# SEE ALSO

sh(1), execve(2), waitpid(2), popen(3)

# STANDARDS

The `system`() function conforms to ANSI X3.159-1989 (“ANSI C89”) and IEEE Std 1003.2-1992 (“POSIX.2”).

# HISTORY

The `system`() function first appeared in Version 6 AT&T UNIX.

# CAVEATS

Never supply the `system`() function with a command containing any part of an unsanitized user-supplied string. Shell meta-characters present will be honored by the sh(1) command interpreter.

It is often simpler to bypass the shell and run an external command using fork(2), execlp(3), and waitpid(2) directly instead of having to sanitize a string for shell consumption.

February 5, 2016 | Debian