Articulo de referencia

Generar (computación)

En informática , `spawn` es una función que carga y ejecuta un nuevo proceso hijo . El proceso actual puede esperar a que el hijo finalice o puede continuar ejecutando cálculos ...

En informática , `spawn` es una función que carga y ejecuta un nuevo proceso hijo . El proceso actual puede esperar a que el hijo finalice o puede continuar ejecutando cálculos concurrentes . La creación de un nuevo subproceso requiere suficiente memoria para que tanto el proceso hijo como el programa actual puedan ejecutarse.

En DOS existe una familia de funciones de creación de procesos , heredadas por Microsoft Windows .

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

Funciones de inicio de DOS/Windows

Las funciones de creación de procesos de DOS/Windows están inspiradas en las funciones de Unixfork ; execsin embargo, como estos sistemas operativos no admiten `fork`, la función ` spawn` se proporcionó como reemplazo de la combinación `fork-exec`. No obstante, la función ` spawn`, si bien maneja adecuadamente los casos de uso más comunes, carece de toda la potencia de `fork-exec`, ya que después de `fork` cualquier configuración del proceso que sobreviva a una ejecución puede modificarse. Sin embargo, en la mayoría de los casos, esta deficiencia puede compensarse utilizando la CreateProcessAPI 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 spawnse realiza una llamada permanecen abiertos en el proceso hijo.

Prototipo

intspawnl(intmode,char*path,char*arg0,...);
intspawnle(intmode,char*path,char*arg0,...,char*envp[]);
intspawnlp(intmode,char*path,char*arg0,...);
intspawnlpe(intmode,char*path,char*arg0,...,char*envp[]);
intspawnv(intmode,char*path,char*argv[]);
intspawnve(intmode,char*path,char*argv[],char*envp[]);
intspawnvp(intmode,char*path,char*argv[]);
intspawnvpe(intmode,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 modeargumento determina la forma en que se ejecuta el proceso hijo. Los valores modeson:

Camino

El pathargumento especifica el nombre del archivo del programa que se va a ejecutar. spawnlpSolo spawnvpsi el archivo no tiene una ruta y no se encuentra 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 que se va a ejecutar.

La línea de comandos pasada al programa generado está compuesta por las cadenas de caracteres, arg0a través de argn, en la spawnllamada. La longitud combinada máxima aceptada de estas cadenas difiere entre compiladores, desde 128 caracteres en Digital Mars [ 2 ] hasta 1024 en Microsoft Visual C++ [ 3 ] o tanto como lo permita la memoria, en DJGPP. [ 4 ] El último argumento después de argndebe ser un puntero nulo .

argv

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

entorno

Las llamadas spawnle, spawnlpe, spawnve, y spawnvpepermiten al usuario modificar el entorno del proceso hijo pasando una lista de configuraciones de entorno en el envpargumento. Este argumento es una matriz de punteros a 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 namees el nombre de la variable y valuees su valor. El último puntero en el array es nulo. Cuando el envpargumento es nulo, el hijo hereda la configuración del entorno del padre.

En Microsoft Windows, las funciones spawn* se utilizan 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, se puede obtener el identificador de instancia mediante . Es posible especificar cómo se mostrará el programa generado mediante las funciones , , y .LoadModuleexec_instancehandleget_exec_showset_exec_showget_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 se ejecutó correctamente. Un valor positivo indica que el programa se ejecutó, pero se abortó o finalizó con un error; el valor devuelto es el estado de salida del proceso hijo. Un valor negativo indica que el programa no se ejecutó y errnose establece. En Microsoft Windows, spawndevuelve el código de error negado LoadModulepara garantizar la 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

El posix_spawn(3p)y su hermano posix_spawnppueden usarse como reemplazos de forkyexec , pero no proporciona 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 embebidos donde forkno es compatible debido a la falta de traducción dinámica de direcciones ; sin embargo, es posible que los sistemas operativos tipo Unix con soporte completo para traducción dinámica de direcciones también los implementen.

Historia

La spawnmetáfora de producir descendencia, como en la puesta de huevos, se utilizó tempranamente en el sistema operativo VMS, ahora OpenVMS (1977). En el ámbito académico, existía un animado debate entre los defensores de Unixfork (copia rudimentaria de la distribución de memoria, pero rápido) y los de VMS spawn(construcción fiable de parámetros de proceso, pero más lento). Este debate se reavivó cuando el mecanismo de generación de procesos de VMS fue adoptado por Windows NT (1993).

Véase también

Notas

  1. El Subsistema de Windows para Linux implementa el mecanismo `fork`. Otros entornos POSIX, como Cygwin, pueden tener una implementación, pero no se recomienda su uso debido a las diferencias en el modelo de procesos 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 él.

Referencias

  1. Posix.1-2008 spawn.h
  2. Proceso de Digital Mars.h
  3. Microsoft MSDN
  4. DJGPP spawn*