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:

POSIX spawn functions

The posix_spawn(3p) and its sibling posix_spawnp can be used as replacements for fork and exec, but does not provide the same flexibility as using fork and exec separately. They may be efficient replacements for fork and exec, but their purpose is to provide process creation primitives in embedded environments where fork is not supported due to lack of dynamic address translation; however, may Unix-like operating systems with full dynamic address translation support also implement them.

History

The spawn metaphor, i.e., to produce offspring as in egg deposition, had its early use in the VMS, now OpenVMS, operating system (1977). In academia, there existed a lively debate between proponents of the Unixfork (crude copy of memory layout, but fast) versus VMS's spawn (reliable construction of process parameters, but slower). This debate revived when the VMS spawning mechanism was inherited by Windows NT (1993).

See also

Notes

  1. Windows Subsystem for Linux implements fork. Other POSIX environments such as Cygwin may have an implementation, but using it is not recommended due to the differences in the process model between POSIX and Windows. Fork is not part of the Windows API and most Windows programs do not use these environments, so do not have access to fork.

References

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