![]() |
![]() ![]() ![]() ![]() |
|
Как клонировать процессDelphi , ОС и Железо , KylixАвтор: http://www.swissdelphicenter.ch
{
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
}
Программа на Delphi, демонстрирующая концепцию дублирования процесса с помощью системного вызова Расшифровка кода:
Вывод: Программа выводит различные поведения оригинального процесса и дублированного процесса:
Обратите внимание, что системный вызов Альтернативное решение: В Delphi можно также использовать компонент Код создает новый процесс, выполняющий команду "some_command". Обратите внимание, что это подход специфичен для Windows и не может быть использован в Linux. Статья описывает способ клонирования процесса в Linux с помощью функции fork, которая дублирует процесс и возвращает идентификатор нового процесса в оригинальном процессе. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||