3 votes

Est-il possible d'interrompre un processus et de le mettre en point de contrôle pour le reprendre plus tard ?

Disons que vous avez une application qui consomme toute la puissance de calcul. Maintenant vous voulez faire d'autres travaux nécessaires. Existe-t-il un moyen sous Linux d'interrompre cette application et de vérifier son état, de sorte qu'elle puisse être reprise plus tard à partir de l'état où elle a été interrompue ?

Je suis particulièrement intéressé par un moyen de stopper l'application et de la redémarrer sur une autre machine. Est-ce également possible ?

5voto

Basile Starynkevitch Points 67055

En termes généraux, le point de contrôle d'un processus n'est pas entièrement possible (parce qu'un processus n'est pas seulement un espace d'adressage, mais a aussi d'autres ressources comme des descripteurs de fichiers, des sockets TCP/IP ...).

En pratique, vous pouvez utiliser certaines bibliothèques de pointage comme BLCR etc. Sous certaines conditions, il est possible de migrer une image de point de contrôle d'un système à un autre (très similaire au système source : même noyau, mêmes versions des bibliothèques et compilateurs, etc.)

La migration des images est également possible au niveau du machine virtuelle niveau. Certains d'entre eux sont très bons pour cela.

Vous pouvez également concevoir et mettre en œuvre votre logiciel avec vos propres mécanismes de contrôle. Dans ce cas, vous devriez penser à utiliser collecte des déchets les techniques et la terminologie. Regardez aussi dans Emacs (ou Xemacs ) unexec.c (qui dépend fortement de la machine).

L'implémentation et l'exécution de certains langages ont des primitives de point de contrôle. SBCL (une implémentation libre de Common Lisp) est capable de sauvegarder une image de base et le redémarrer plus tard. SML/NJ est capable de exporter une image . Grincement (une implémentation de Smalltalk) possède également une telle capacité.

Comme autre exemple de point de contrôle, le compilateur GCC est en fait capable de compiler un simple *.h (dans un fichier d'en-tête pré-compilé qui est une image persistante du tas de GCC) en utilisant techniques de persistance .

Plus d'informations sur persistance orthogonale . C'est aussi un sujet de recherche. sérialisation est également pertinent (et vous pourriez vouloir utiliser des formats textuels à la JSON, YAML, XML, ...). Vous pouvez également utiliser hibernation (au niveau de l'ensemble du système).

3voto

Fredrik Leijon Points 2523

Extrait des pages du manuel man kill

L'interruption d'un processus nécessite deux étapes :

Pour arrêter

kill -STOP <pid>  

et

Pour continuer

kill -CONT <pid>

<pid> est l'identifiant du processus.

2voto

ouah Points 75311

Type : Control + Z pour suspendre un processus (il envoie un SIGTSTP)

puis bg / fg pour le reprendre en arrière-plan ou en avant-plan

1voto

R.. Points 93718

Le pointage de contrôle d'un processus individuel est fondamentalement impossible sur POSIX. C'est parce que les processus ne sont pas indépendants ; ils peuvent interagir. Un processus possède un ID de processus unique, qu'il peut avoir stocké quelque part en interne, et si vous le reprenez avec un ID de processus différent, l'enfer peut se déchaîner. Ceci est particulièrement vrai si le processus utilise des verrous ou des primitives de synchronisation. Bien sûr, vous ne pouvez pas non plus reprendre le processus avec la fonction même l'ID du processus qu'il avait à l'origine, car il pourrait être pris par un nouveau processus.

Vous pourriez peut-être résoudre le problème en rendant les identifiants de processus (et de threads) à 128 bits ou plus, de sorte qu'ils soient universellement uniques...

0voto

Michał Cegielski Points 301

Sous linux, c'est possible en envoyant le signal STOP au processus. Plus tard, vous le reprenez en envoyant le signal CONT. Veuillez vous référer au manuel de kill.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X