GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo hibernar un proceso en Linux almacenando su memoria en el disco y restaurándolo más tarde?

Solía ​​mantener CryoPID, que es un programa que hace exactamente lo que dices. Escribe el contenido del espacio de direcciones de un programa, VDSO, referencias de descriptor de archivo y estados en un archivo que luego se puede reconstruir. CryoPID comenzó cuando no había ganchos utilizables en Linux y funcionó completamente desde el espacio del usuario (en realidad, todavía funciona, dependiendo de la configuración de distribución/kernel/seguridad).

Los problemas fueron (de hecho) sockets, señales RT pendientes, numerosos problemas con X11, la implementación de getpid() de almacenamiento en caché de glibc, entre muchos otros. La aleatorización (especialmente VDSO) resultó ser insuperable para los pocos de nosotros que trabajamos en ella después de que Bernard se alejara. Sin embargo, fue divertido y se convirtió en el tema de varias tesis de maestría.

Si solo está contemplando un programa que puede guardar su estado de ejecución y reiniciar directamente en ese estado, es mucho... mucho... más fácil simplemente guardar esa información desde dentro del programa mismo, tal vez al dar servicio a una señal.


Me gustaría poner una actualización de estado aquí, a partir de 2014.

La respuesta aceptada sugiere CryoPID como herramienta para realizar puntos de control/restauración, pero descubrí que el proyecto no tenía mantenimiento y era imposible de compilar con núcleos recientes. Ahora, encontré dos proyectos mantenidos activamente que brindan la función de puntos de control de la aplicación.

El primero, el que sugiero porque tengo más suerte al ejecutarlo, es CRIU, que realiza puntos de control/restauración principalmente en el espacio de usuario, y requiere que la opción de kernel CONFIG_CHECKPOINT_RESTORE esté habilitada para funcionar.

Checkpoint/Restore In Userspace, o CRIU (pronunciado kree-oo, IPA:/krɪʊ/, ruso:криу), es una herramienta de software para el sistema operativo Linux. Con esta herramienta, puede congelar una aplicación en ejecución (o parte de ella) y controlarla en un disco duro como una colección de archivos. Luego puede usar los archivos para restaurar y ejecutar la aplicación desde el punto en que se congeló. La característica distintiva del proyecto CRIU es que se implementa principalmente en el espacio del usuario.

Este último es DMTCP; citando de su página principal:

DMTCP (Distributed MultiThreaded Checkpointing) es una herramienta para verificar de forma transparente el estado de varias aplicaciones simultáneas, incluidas las aplicaciones multiproceso y distribuidas. Opera directamente en el ejecutable binario del usuario, sin ningún módulo del kernel de Linux u otras modificaciones del kernel.

También hay una buena página de Wikipedia sobre el argumento:Application_checkpointing


Las respuestas que mencionan ctrl-z en realidad estamos hablando de detener el proceso con una señal, en este caso SIGTSTP . Puede emitir una señal de alto con kill :

kill -STOP <pid>

Eso suspenderá la ejecución del proceso. No liberará inmediatamente la memoria utilizada por él, pero como se requiere memoria para otros procesos, la memoria utilizada por el proceso detenido se intercambiará gradualmente.

Cuando quieras reactivarlo de nuevo, usa

kill -CONT <pid>

Las soluciones más complicadas, como CryoPID, realmente solo son necesarias si desea que el proceso detenido pueda sobrevivir a un apagado/reinicio del sistema; no parece que lo necesite.


Linux
  1. Cómo iniciar el comando de Linux en segundo plano y separar el proceso en la terminal

  2. Cómo verificar el uso de memoria del proceso con el comando pmap de Linux

  3. ¿Recuperar el uso de la CPU y el uso de la memoria de un solo proceso en Linux?

  4. Almacenamiento y copia de seguridad de 10 millones de archivos en Linux

  5. Ubuntu Linux:procesamiento de memoria de intercambio y uso de memoria

Kernel de Linux y sus funciones

Cómo ver el uso del disco con Duf en Linux y Unix

Cómo suspender un proceso y reanudarlo más tarde en Linux

Cómo encontrar el PID y PPID de un proceso en Linux

Cómo verificar el tamaño de los archivos y directorios en Linux

Cómo rastrear y rastrear un proceso de Linux