Как клонировать процесс?

Previous  Top  Next

    
 

 

 

Code:

{

In Linux it is possible to duplicate a process with fork. In the original

process, fork will return the handle to the duplicated process. The

duplicated process will return zero.

}

 

program TestFork;

 

{$APPTYPE CONSOLE}

 

uses

SysUtils,

Libc;

 

var

ForkedProcessHandle: __pid_t;

bForked: Boolean;

 

procedure ForkNow;

begin

bForked := true;

ForkedProcessHandle := fork;

end;

 

function IsForked: Boolean;

begin

Result := (ForkedProcessHandle = 0) and bForked;

end;

 

var

Lf: Integer;

 

begin

sigignore(SIGCHLD);

bForked := false;

 

WriteLn('do some stuff');

 

WriteLn('before fork');

ForkNow;

WriteLn('after fork - we have dublicated the process');

 

if IsForked then begin

   WriteLn('do some stuff in forked process (wait 5s)');

   for Lf := 0 to 50 do begin

     Write('f');

     sleep(100);

   end;

end else begin

   WriteLn('do stuff in original process (wait 10)');

   for Lf := 0 to 100 do begin

     Write('o');

     sleep(100);

   end;

end;

 

WriteLn;

 

if IsForked then

   WriteLn('forked process end')

else

   WriteLn('original process end');

end.

 

 

{

Output of this demo app:

 

do some stuff

before fork

after fork - we have dublicated the process

after fork - we have dublicated the process

do some stuff in forked process (wait 5s)

fdo stuff in original process (wait 10)

ooffooffooffooffooffooffooffooffooffooffooffooffooffooffooffooffooffooff

ooffooffooffooffooffooffooffoo

forked process end

ooooooooooooooooooooooooooooooooooooooooooooooooo

original process end

}

 

 

©Drkb::04616

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php