Seth Woolley's Man Viewer

system(3) - system, system - execute a shell command - man 3 system

([section] manual, -k keyword, -K [section] search, -f whatis)
man plain no title

SYSTEM(3)                  Linux Programmer's Manual                 SYSTEM(3)

       system - execute a shell command

       #include <stdlib.h>

       int system(const char *string(3,n));

       system()  executes  a command specified in(1,8) string(3,n) by calling /bin/sh -c
       string(3,n), and returns after the command has been completed.  During  exe-
       cution  of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT
       will be ignored.

       The value returned is -1 on error(8,n) (e.g. fork failed),  and  the  return
       status  of  the command otherwise.  This latter return status is in(1,8) the
       format specified in(1,8) wait(2).  Thus, the exit(3,n,1 builtins) code of the  command  will
       be  WEXITSTATUS(status).   In  case  /bin/sh could not be executed, the
       exit(3,n,1 builtins) status will be that of a command that does exit(3,n,1 builtins)(127).

       If the value of string(3,n) is NULL, system() returns nonzero if(3,n)  the  shell
       is available, and zero if(3,n) not.

       system() does not affect the wait status of any other children.

       ANSI C, POSIX.2, BSD 4.3

       As  mentioned, system() ignores SIGINT and SIGQUIT.  This may make pro-
       grams that call it from a loop uninterruptable, unless they  take  care
       themselves to check the exit(3,n,1 builtins) status of the child. E.g.

           while(something) {
               int ret = system("foo");

               if(3,n) (WIFSIGNALED(ret) &&
                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))

       Do  not  use  system()  from  a  program  with suid or sgid privileges,
       because strange values for some environment variables might be used  to
       subvert system integrity.  Use the exec(3,n,1 builtins)(3) family of functions instead,
       but not execlp(3) or execvp(3).  system() will not, in(1,8) fact, work prop-
       erly  from  programs  with  suid or sgid privileges on systems on which
       /bin/sh is bash version(1,3,5) 2, since bash 2 drops  privileges  on  startup.
       (Debian  uses  a  modified  bash which does not do this when invoked as

       The check for the availability of /bin/sh is not actually performed; it
       is  always  assumed  to  be  available.  ISO C specifies the check, but
       POSIX.2 specifies that the return shall always  be  non-zero,  since  a
       system  without  the  shell  is  not conforming, and it is this that is

       It is possible for the shell command to return 127, so that code is not
       a sure indication that the execve() call failed.

       sh(1), signal(2,7)(2), wait(2), exec(3,n,1 builtins)(3)

                                  2001-09-23                         SYSTEM(3)

References for this manual (incoming links)