This library provides simple API to spawn processes and communicate with them. We provide two implementations of the same API - the integrated into Glib event loop and the independent.
Run alr get --build spawn or alr get --build spawn_glib.
Also you can build from the cloned repository directory with
alr build For spawn_glib do this in packages/glib subdirectory:
cd packages/glib alr build Clone repository or unpack source archive, then run
make all install PREFIX=/path/to/install - Add 
with "spawn";orwith "spawn_glib";to your project file. - Create a process object: 
P : Spawn.Processes.Process;
 - Assign program name 
P.Set_Program ("/bin/bash"); - (Optional) Assign command line arguments, working directory, environments variables.
 - Assign an event listener 
P.Set_Listener (L'Unchecked_Access);
 - Start the process: 
P.Start;
 - (Glib independent case) With no event loop integration you should drive it by you-self periodically calling 
Spawn.Processes.Monitor_Loop (1); 
The listener will get these events:
- Standard_Output_Available
 - Standard_Error_Available
 - Standard_Input_Available
 - Started
 - Finished
 - Error_Occurred
 - Exception_Occurred
 
See an example in the spawn test
Next diagram shows process states and emited events during its life:
You should NOT finalize process object until it in Not_Running state.
Feel free to dive in! Open an issue or submit PRs.
