A resposta que você está procurando é digna de toda uma equipe de pesquisa especializada ... os requisitos para isso são demais. AskUbuntu pode ser o lugar errado.
As coisas a se notar incluem: memória de processo, estados de thread, memória da placa gráfica, descritores de arquivos abertos, estados do soquete do kernel (Internet / UNIX), outros canais IPC, estados do kernel de quaisquer arquivos de dispositivos abertos, memória mapas, ambiente, toda a memória do espaço kernel no caso de o processo estar no meio de uma chamada sys (como ao esperar que uma ação aconteça), propriedades da memória do processo (como bits sem execução), e muitos, muitos outros (talvez o dobro do que eu já listei).
Como a maioria deles exige patches de driver de dispositivo e kernel, os idiomas necessários são C e ASM.
Um projeto que tenta fazer isso é chamado LinuxPMI, você pode querer investigar isso.
Formas alternativas de migrar um processo:
- Suspender para o disco e usar um sistema externo para copiar a partição de troca e todo o disco para outro sistema
- Hospede o processo dentro de uma máquina virtual e deixe seu sistema de arquivos raiz ser uma união (ou seja, UnionFS ou AuFS) de uma imagem do sistema somente leitura básica e uma imagem em branco que será preenchida com quaisquer alterações feitas pelo sistema; em seguida, suspenda a máquina virtual e copie a imagem menor
- Implemente (do zero) uma máquina virtual de processo único inteiro, que implemente o conjunto completo de instruções i686 e forneça wrappers e ganchos para cada chamada de sistema e biblioteca necessária