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)