In simple word Process migration means move a process between machines during its lifetime. It is the act of transferring a process between two machines. It enables dynamic load distribution, fault resilience, eased system administration, and data access locality. It is used to achieve better system wide utilization of resources (e.g. as one computer becomes too heavily loaded, some of the processes can migrate to a less loaded system).
On multicore machines (multiple cores on one processor or multiple processors) process migration happens as a standard part of process scheduling, and it is quite easy to migrate a process within a given machine, since most resources (memory, files, sockets) do not need to be changed, only the execution context (primarily program counter and registers).
There are two types of process migration
Non-preemptive process migration
Process migration that takes place before execution of the process starts (i.e. migration whereby a process need not be preempted). This type of process migration is relatively cheap, since relatively little administrative overhead is involved.
Preemptive process migration
Process migration whereby a process is preempted, migrated and continues processing in a different execution environment. This type of process migration is relatively expensive, since it involves recording, migration and recreation of the process state as well as the reconstructing of any inter-process communication channels to which the migrating process is connected.