---
name: "system"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/system"
---

# system(3)

pass a command to the shell

## NAME

**system** – pass a command to the shell

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<stdlib.h\>**

*int*\

**system**(*const char \*string*);

## DESCRIPTION

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

If *string* is a NULL pointer, **system**() will return non-zero if the command interpreter [sh(1)](/sh/1.md) is available, and zero if it is not.

## RETURN VALUES

The **system**() function returns the exit status of the shell as returned by [waitpid(2)](/waitpid/2.md), or -1 if an error occurred when invoking [fork(2)](/fork/2.md) or [waitpid(2)](/waitpid/2.md). If the child process fails to execute the shell, it will terminate with an exit code of 127 and **system** will return the corresponding exit status.

## SEE ALSO

[sh(1)](/sh/1.md), [execve(2)](/execve/2.md), [fork(2)](/fork/2.md), [waitpid(2)](/waitpid/2.md), [popen(3)](/popen/3.md), [posix\_spawn(3)](/posix_spawn/3.md)

## STANDARDS

The **system**() function conforms to ISO/IEC 9899:1990 (“ISO C90”) and is expected to be IEEE Std 1003.2 (“POSIX.2”) compatible.

## SECURITY CONSIDERATIONS

The **system**() function is easily misused in a manner that enables a malicious user to run arbitrary commands, because all meta-characters supported by [sh(1)](/sh/1.md) would be honored. User supplied parameters should always be carefully sanitized before they appear in *string*.
