Ich habe folgendes, mit ein wenig Änderung probiert hier probiert
https://www.ibm.com/docs/en/zos/2.4.0?t ... s-group-id
Da wird irgendwie ein neuer Prozess gestartet. Es kommt "Halt(0)", aber das Ganze läuft im else-Block weiter.
Nur wie kommt er in den else-Block ?
Er kann doch nicht gleichzeigt im then und else - Block sein ?
Wen er das Programm 2x starten würde, dann müsste nach meiner Meinung das "WriteLn('begin'); " 2x kommen

Code: Alles auswählen
program project1;
uses
ctypes;
procedure setsid; cdecl; external 'c';
function fork: cint; cdecl; external 'c';
function getpgrp: cint; cdecl; external 'c';
function sleep(sec: cint): cint; cdecl; external 'c';
procedure main;
var
pid: cint = 0;
i: integer;
begin
WriteLn('begin');
if (pid = fork) = False then begin
WriteLn('1. child''s process group id is ', getpgrp);
setsid;
WriteLn('2. child''s process group id is now ', getpgrp);
Halt(0);
end else begin
WriteLn('3. child''s process group id is ', getpgrp);
for i := 0 to 9 do begin
sleep(1);
WriteLn(i);
end;
end;
WriteLn('end');
end;
begin
main;
end.