Est-il possible de copyr un process en cours d'exécution entre des machines?

Pour autant que je sache, tous les process linux sont en fait des files, est-il possible de copyr un process en cours d'une machine à l'autre?

par exemple – copyr un server Tomcat en cours d'exécution d'une machine à l'autre sans avoir à redémarrer le server

    Pour autant que je sache, tous les process linux sont en fait des files

    Vous ne devriez pas prendre la métaphore trop littéralement. Les process Linux peuvent en effet être accessibles via un pseudo système de files pour le debugging, la surveillance et l'parsing, mais les process ne se limitent pas à ces files et leur «copy» d'un système source /proc vers un système de files cible /proc est condamné.

    L'un des problèmes les plus importants lors du déplacement d'un process en cours d'exécution entre les hôtes est la manière de gérer les descripteurs de files ouverts utilisés par ce process. Si un process lit ou écrit un file, ce même file (ou un clone exact) doit être disponible sur l'hôte cible. Les descripteurs de files relatifs aux sockets seraient difficiles à traiter car l'adresse IP à laquelle ils sont liés changera vraisemblablement d'un hôte à l'autre. Les process partageant des segments de memory avec d'autres cesseraient de le faire après une migration. Les conflits PID peuvent également se produire, si un process en cours a le même pid que celui entrant, l'un d'eux devra être changé. La relation parent-enfant sera perdue, et je viens d'égratigner les problèmes potentiels.

    En dépit de ces problèmes, il existe des solutions techniques fournissant cette fonctionnalité appelée « sharepoint contrôle d'application » comme DMTCP et CRIU . Ceci est similaire à ce qui est utilisé avec les hyperviseurs tels que VMWare, VirtualBox, Oracle VM et d'autres lorsqu'ils effectuent des migrations virtuelles / téléportation de machines virtuelles. Avec les machines virtuelles, le travail est en réalité «plus simple», tout le operating system étant déplacé, y compris les descripteurs de files, les filesystems, la memory, le réseau et les autres périphériques, etc.

    Non, il n'est pas possible de déplacer un process (c'est-à-dire un programme en cours d'exécution) d'une machine Unix à une autre.

    Certains services , tels que les services Web, les services de database ou les routeurs, offrent des options de redondance, telles que le basculement et / ou l'équilibrage de charge. Cela signifie que plusieurs copys du service s'exécutent sur plusieurs machines et que si l'une d'entre elles prend le relais, elles partagent la charge de fournir le service, éventuellement en répliquant les bases de données / états entre elles pour restr à jour.

    Ces types de services «passeraient» d'une machine à l'autre, alors que les process qui fournissent le service ne bougent pas.

    Ceci est une fonctionnalité du service spécifique, cependant, et non d'Unix.

    Vous findez plus d'informations sur le forum ServerFault .

    Non, à partir de maintenant ce n'est pas possible. lorsque le process relève d'un service. Ensuite, le service de transfert de process de service peut être possible. Mais cela exigeait des changements de niveau d'OS.