

Standard C Library Functions                           system(3C)


NAME
     system - issue a shell command

SYNOPSIS
     #include <stdlib.h>

     int system(const char *string);


DESCRIPTION
     The system() function causes string to be given to the shell
     as input, as if string had been typed as a command at a ter-
     minal. The invoker waits until the shell has completed, then
     returns the exit status of the shell in the format specified
     by waitpid(3C).



     If string is a null pointer, system() checks  if  the  shell
     exists  and  is executable.  If the shell is available, sys-
     tem() returns a non-zero value;  otherwise,  it  returns  0.
     The  standard  to which the caller conforms determines which
     shell is used. See standards(5).



     The system() function sets the SIGINT and SIGQUIT signals to
     be ignored, and blocks the SIGCHLD signal for the calling
     thread, while waiting for the command to terminate.  The
     system() function does not affect the termination status of
     any child of the calling processes other than the process
     it itself creates.



     The termination status of the process created by the system()
     function is not affected by the actions of other threads in
     the calling process (it is invisible to wait(3C)) or by the
     disposition of the SIGCHLD signal in the calling process,
     even if it is set to be ignored.  No SIGCHLD signal is sent
     to the process containing the calling thread when the command
     terminates.



RETURN VALUES
     The system() function executes posix_spawn(3C) to create a
     child process running the shell that in turn executes the
     commands in string.  If posix_spawn() fails, system()
     returns -1 and sets errno to indicate the error, else
     the exit status of the shell is returned.



ERRORS
     The system() function may set errno values as described by
     fork(2), in particular:



     EAGAIN          A resource control or  limit  on  the  total
                     number  of  processes,  tasks  or LWPs under
                     execution by a single user,  task,  project,
                     or  zone  has  been  exceeded,  or the total
                     amount of system memory  available  is  tem-
                     porarily insufficient to duplicate this pro-
                     cess.



     ENOMEM          There is not enough swap space.



     EPERM           The  {PRIV_PROC_FORK}   privilege   is   not
                     asserted in the effective set of the calling
                     process.




USAGE
     The system() function manipulates the  signal  handlers  for
     SIGINT and SIGQUIT. It is therefore not safe to
     call system() in a multithreaded process, since  some  other
     thread  that  manipulates these signal handlers and a thread
     that concurrently calls system()  can  interfere  with  each
     other  in  a destructive manner.  If, however, no such other
     thread is active, system() can safely be called concurrently
     from  multiple  threads. See popen(3C) for an alternative to
     system() that is thread-safe.



ATTRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Standard                    |
    |_____________________________|_____________________________|
    | MT-Level                    | Unsafe                      |
    |_____________________________|_____________________________|


SEE ALSO
     ksh(1), sh(1), popen(3C), posix_spawn(3C), wait(3C),
     waitpid(3C), attributes(5), standards(5)
