Provided by: manpages-es_1.55-10_all bug

NOMBRE

       system - ejecuta una orden del intérprete de órdenes (shell)

SINOPSIS

       #include <stdlib.h>

       int system(const char *string);

DESCRIPCIÓN

       system()  ejecuta una orden especificada en string llamando a /bin/sh -c string, y regresa
       después de que la orden se haya terminado de ejecutar.  Durante la ejecucion de la  orden,
       se bloqueará SIGCHLD y no se hace caso de las señales SIGINT ni SIGQUIT.

VALOR DEVUELTO

       El  valor  devuelto  es  -1  en  caso de error (p.e. falló la llamada a fork), y el estado
       devuelto por  la  orden  en  caso  contrario.   Este  último  valor  está  en  el  formato
       especificado  en  wait(2).  Así, el código de salida de la orden será WEXITSTATUS(status).
       En caso de que /bin/sh no pudiera ejecutarse, el estado de salida será el de una orden que
       haga  exit(127).   Si  el valor de string es NULL, system() devuelve un número distinto de
       cero si hay un intérprete de órdenes disponible, y cero si no.

       system() no afecta al estado de espera de cualquier otro proceso hijo.

CONFORME A

       C ANSI, POSIX.2, BSD 4.3

OBSERVACIONES

       Como se mencionó, system() ignora SIGINT y SIGQUIT. Esto puede hacer que los programas que
       invocan  a  esta  función  desde  un bucle sean ininterrumpibles, a menos que se preocupen
       ellos mismos de comprobar el estado de salida del hijo. P.e.

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

               if (WIFSIGNALED(ret) &&
                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
                       break;
           }

       No llame a system() desde un programa con privilegios suid o sgid, porque pudiera ser  que
       se  emplearan  valores  extraños  para  algunas  variables  de entorno para comprometer la
       integridad del sistema.  En su  lugar  emplee  la  familia  de  funciones  exec(3),  salvo
       execlp(3)  o execvp(3).  system() , de hecho, no funcionará apropiadamente desde programas
       con privilegios suid o sgid en sistemas donde /bin/sh sea la versión 2 de bash, puesto que
       bash 2 elimina los privilegios en el arranque.  (Debian usa una versión modificada de bash
       que no hace ésto cuando es invocado como sh.)

       En realidad no se comprueba si el intérprete de órdenes /bin/sh está disponible o  no;  en
       Linux  siempre  se  supone  que  lo  está.  ISO C especifica la comprobación, pero POSIX.2
       especifica que el valor devuelto siempre será no cero, ya que un sistema sin intérprete de
       órdenes no es conforme, y esto es lo que se implementa.

       Es  posible que una orden del intérprete de órdenes devuelva 127, así que ese código no es
       una indicación segura de que execve() haya fallado.

VÉASE TAMBIÉN

       sh(1), signal(2), wait(2), exec(3)

                                        23 septiembre 2001                              SYSTEM(3)