Skip to content

Add support for creating and interrupting process groups

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).

Trac metadata
Trac field Value
Version 6.12.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information