id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
3994,Add support for creating and interrupting process groups,hamish,simonmar,"This patch introduces the following to System.Process

'''new_group'''

This Bool field is added to CreateProcess.  If it is set to True the child process will be created as the lead process in a new process group.
 * Unix - calls setpgid in both the parent and the child process after fork.
 * Win32 - calls CreateProcess with the CREATE_NEW_PROCESS_GROUP set.  I also had it unset CREATE_NO_WINDOW because this seems to prevent the child attaching to the parents console (and therefor stops interuptProcessGroup from working).

'''interruptProcessGroup'''

This function can be used interrupt a running process group.
 * Unix - calls signalProcessGroup to send sigINT
 * Win32 - If the process ID is known it calls generateConsoleCtrlEvent to send cTRL_BREAK_EVENT


== __Compatibility__ ==

__Backward Compatibility__

CreateProcess has a new field new_group which may need to be added to some existing code. If set to False the current behaviour is preserved. As far as I know this is the only change that could break existing code.

__Linker Errors__

I have renamed the C functions it used in order to prevent linker errors when using this new version with the existing process package.


== __Win32 Only__ ==

On Win32 the process handle is not the same as the process ID and there is no reliable way to convert from one to the other.  I have added an interface that allows access to the process ID, but does not change the behaviour of the existing functions.

'''PINFO'''

Replaces PHANDLE in the ProcessHandle type.
   type PINFO = (PHANDLE, Maybe Word32) -- Handle and Process ID

'''mkProcessHandleWithPID'''

Like mkProcessHandle but allows you to specify the processes ID as well.  This function is now used in the run* functions and createProcess, so the ProcessHandle they return will contain a process ID.

'''withProcessInfo and withProcessInfo_'''

Like withProcessHandle functions but gives you access to the PINFO (not just the PHANDLE it contains).",feature request,closed,high,7.2.1,libraries/process,6.12.1,fixed,,,Unknown/Multiple,Unknown/Multiple,None/Unknown,,,,,
