{
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 thenbegin
WriteLn("do some stuff in forked process (wait 5s)");
for Lf := 0 to 50 dobeginWrite("f");
sleep(100);
end;
endelsebegin
WriteLn("do stuff in original process (wait 10)");
for Lf := 0 to 100 dobeginWrite("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
}
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Как клонировать процесс", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!