![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Как клонировать процесс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 |