stringtranslate.com

Generar (informática)

Spawn en informática se refiere a una función que carga y ejecuta un nuevo proceso hijo . El proceso actual puede esperar a que el niño termine o puede continuar ejecutando computación concurrente . La creación de un nuevo subproceso requiere suficiente memoria en la que se puedan ejecutar tanto el proceso hijo como el programa actual.

Existe una familia de funciones de generación en DOS , heredadas por Microsoft Windows .

También hay una familia diferente de funciones de generación en una extensión opcional de los estándares POSIX . [1]

Funciones de generación de DOS/Windows

Las funciones de generación de DOS/Windows están inspiradas en las funciones fork y exec de Unix ; sin embargo, como estos sistemas operativos no admiten fork, [2] la función spawn se proporcionó como reemplazo de la combinación fork-exec. Sin embargo, la función spawn, aunque se ocupa adecuadamente de los casos de uso más comunes, carece de toda la potencia de fork-exec, ya que después de la bifurcación se puede cambiar cualquier configuración de proceso que sobreviva a un exec. Sin embargo, en la mayoría de los casos, esta deficiencia se puede compensar utilizando la API CreateProcess de nivel más bajo.

En las llamadas spawnl , spawnlp , spawnv y spawnvp , el proceso hijo hereda el entorno del padre. Los archivos que están abiertos cuando se realiza una llamada de generación permanecen abiertos en el proceso secundario.

Prototipo

int spawnl(int mode, char *path, char *arg0, ...);
int spawnle(int mode, char *path, char *arg0, ..., char ** envp);
int spawnlp(int mode, char *path, char *arg0, ...);
int spawnlpe(int mode, char *path, char *arg0, ..., char ** envp);
int spawnv(int mode, char *path, char **argv);
int spawnve(int mode, char *path, char **argv, char ** envp);
int spawnvp(int mode, char *path, char **argv);
int spawnvpe(int mode, char *path, char **argv, char ** envp);

Nombres de funciones

El nombre base de cada función es spawn , seguido de una o más letras:

Modo

El argumento modo determina la forma en que se ejecuta el niño. Los valores para la moda son:

Camino

El argumento de ruta especifica el nombre de archivo del programa a ejecutar. Solo para spawnlp y spawnvp , si el nombre del archivo no tiene una ruta y no está en el directorio actual, la variable de entorno PATH determina en qué directorios buscar el archivo. La cadena a la que apunta argv [0] es el nombre del programa a ejecutar.

La línea de comando pasada al programa generado se compone de cadenas de caracteres, arg0 a argn , en la llamada de generación . La longitud combinada máxima aceptada de estas cadenas difiere entre compiladores, y oscila entre 128 caracteres en Digital Mars [3] y 1024 en Microsoft Visual C++ [4] o tanto como la memoria lo permita, en DJGPP. [5] El último argumento después de argn tiene que ser un puntero NULL.

argv

El argumento argv es una serie de punteros de caracteres. El último puntero de la matriz debe ser nulo para indicar el final de la lista.

envp

Las llamadas spawnle , spawnlpe , spawnve y spawnvpe permiten al usuario alterar el entorno del proceso hijo pasando una lista de configuraciones de entorno en el argumento envp . Este argumento es una serie de punteros de caracteres; cada puntero (excepto el último) apunta a una cadena terminada en nulo que define una variable de entorno. Una variable de entorno tiene la forma:

nombre = valor

donde nombre es el nombre de la variable y valor es su valor. El último puntero de la matriz es nulo. Cuando el argumento envp es nulo, el hijo hereda la configuración del entorno del padre.

En Microsoft Windows, las funciones spawn* usan LoadModule para ejecutar el proceso generado; y si esto falla, se intenta generar un proceso MS-DOS normal. Si se genera una aplicación de Windows, el identificador de instancia se puede obtener usando exec_instancehandleget . Es posible especificar cómo se mostrará el programa generado utilizando las funciones _exec_showset , _exec_showget y _exec_showreset .

Valores de retorno

El valor de retorno indica el estado de salida del programa generado. Un valor de cero indica que el programa generado se ejecutó exitosamente. Un valor positivo indica que el programa generado se ejecutó, pero se abortó o finalizó por error; el valor devuelto es el estado de salida del proceso hijo. Un valor negativo indica que el programa generado no se ejecutó y se establece errno. En Microsoft Windows, spawn devuelve el código de error negado devuelto por LoadModule por compatibilidad con la biblioteca de tiempo de ejecución de C. Se pueden encontrar los siguientes códigos de error:

Funciones de generación POSIX

The posix_spawn(3p)y su hermano posix_spawnpse pueden usar como reemplazos de fork y exec , pero no brindan la misma flexibilidad que usar forky execpor separado. Pueden ser reemplazos eficientes para forky exec, pero su propósito es proporcionar primitivas de creación de procesos en entornos integrados donde forkno son compatibles debido a la falta de traducción dinámica de direcciones .

Historia

La metáfora del desove , es decir, producir descendencia como en la deposición de huevos, tuvo su primer uso en el sistema operativo VMS, ahora OpenVMS (1977). En el mundo académico, existía un animado debate entre los defensores de la bifurcación de Unix (copia tosca del diseño de la memoria, pero rápida) versus el spawn de VMS (construcción confiable de parámetros de proceso, pero más lento). Este debate revivió cuando Windows NT heredó el mecanismo de generación de VMS (1993).

Ver también

Referencias

  1. ^ Posix.1-2008 spawn.h
  2. ^ El subsistema de Windows para Linux implementa una bifurcación. Otros entornos POSIX como Cygwin pueden tener una implementación, pero no se recomienda su uso debido a las diferencias en el modelo de proceso entre POSIX y Windows. Fork no forma parte de la API de Windows y la mayoría de los programas de Windows no utilizan estos entornos, por lo que no tienen acceso a fork.
  3. ^ Proceso digital de Marte.h
  4. ^ MicrosoftMSDN
  5. ^ Generación de DJGPP *