segunda programar gratis edicion deitel cuarta como process coredump process-migration

process - gratis - como programar en c/c++ segunda edicion pdf



¿Puedes congelar un proceso C/C++ y continuarlo en un host diferente? (9)

Hay muchas razones por las que no puedes hacer lo que quieres muy fácilmente. Por ejemplo, cuando restaura el archivo core en la otra máquina, ¿cómo se resuelven los descriptores de archivos que procesó? ¿Qué pasa con los sockets, pipes, semáforos o cualquier otro recurso de nivel de sistema operativo? Básicamente, a menos que su sistema esté específicamente diseñado para manejar una operación de este tipo, no puede volcar ingenuamente un archivo central y moverlo a otra máquina.

Me preguntaba si es posible generar un archivo "core", copiarlo en otra máquina y luego continuar la ejecución del archivo core en esa máquina.

He visto la utilidad gcore que formará un archivo central a partir de un proceso en ejecución. Pero no creo que gdb pueda continuar la ejecución en base a un archivo central.

¿Hay alguna manera de simplemente volcar el montón / pila y restaurarlos en un momento posterior?


Esto, en general, no será suficiente para permitir que un proceso arbitrario continúe en otra máquina. Además del estado de acumulación y acumulación, también puede abrir identificadores de E / S, recursos de hardware asignados, etc., etc.

Sus opciones son escribir explícitamente su software de una manera que le permita volcar estado en una señal y luego reanudar desde el estado objeto de dumping, o ejecutar su software en una máquina virtual y migrar eso al host alternativo - Xen y Vmware ambas soportan congelación / restauración, así como la migración en vivo.

Dicho esto, CryoPID intenta hacer precisamente esto y ocasionalmente tiene éxito.


Depende de la máquina. Es muy factible en un sistema integrado muy pequeño, por ejemplo. Creo que también está implementado de alguna forma en los clústeres de Beowulf y otras aplicaciones supercomputersqueras.


En algunos casos, esto se puede hacer. Por ejemplo, parte del proceso de compilación de Emacs es cargar todas las bibliotecas Lisp y luego volcar la imagen de memoria en el disco para una carga rápida. Algunos intérpretes de otros idiomas también lo hacen (estoy pensando en las implementaciones de Lisp y Scheme, principalmente). Sin embargo, están especialmente diseñados para ese tipo de uso, por lo que no sé qué cosas especiales tienen que hacer para que funcionen.

Creo que esto sería muy difícil de hacer para un programa aleatorio, pero si escribiste un marco donde todos los objetos soportaran la serialización / deserialización, puedes serializar todos los objetos usados ​​por tu programa, y ​​luego enviarlos a otro lugar, y deserializarlos en el Otro final.

Las respuestas de otras personas sobre la virtualización también están en el lugar.


En sistemas modernos, no desde un archivo central, no, no puedes. Para congelar y restaurar un proceso individual en Linux, CryoPID y el nuevo punto de control y reinicio basado en Kernel están en proceso, pero sus capacidades son actualmente bastante limitadas. OpenVZ y otros softwares similares a la virtualización pueden congelar y restaurar un sistema completo.


No creo que esto sea posible. Sin embargo, es posible que desee buscar en el software de virtualización, por ejemplo, Xen , que permita congelar y mover imágenes enteras del sistema de una máquina a otra.


También puedes sacar el proyecto Condor . Condor también puede hacer eso con trabajos paralelos. Condor también incluye monitores que pueden migrar automáticamente su proceso cuando algunos, por ejemplo, vuelven a usar su estación de trabajo. Está realmente diseñado para utilizar ciclos de repuesto en entornos de red.



A partir de febrero de 2017, hay una herramienta bastante estable y madura, llamada CRIU que depende de las actualizaciones del Kernel Linux realizadas en la versión 3.11 (como se hizo en septiembre de 2013, la mayoría de las distribuciones modernas deberían tener incorporadas en sus versiones kernel) .

Se puede instalar a través de aptitude simplemente llamando a sudo apt-get install criu .

Instrucciones sobre cómo usarlo.