{
Unter Linux kann ein Process mit fork dupliziert werden. Im original
Prozess gibt fork das Handle auf den duplizierten Prozess zurück, im
Duplizierten wird 0 zurück gegeben.
}
{
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
}