Skip to content

AdaCore/spawn

This branch is 2 commits ahead of, 10 commits behind master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ebdbafb · Sep 24, 2024
Jan 2, 2023
Feb 17, 2023
Mar 7, 2023
May 12, 2023
Mar 7, 2023
Sep 24, 2024
Dec 16, 2022
Apr 5, 2023
May 12, 2023
Jun 22, 2022
Jun 22, 2022
Mar 9, 2023
May 12, 2023
Mar 7, 2023
Sep 24, 2024

Repository files navigation

Ada Process API (spawn)

Build Alire

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.

Install

Using alire

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

Build from sources

Clone repository or unpack source archive, then run

make all install PREFIX=/path/to/install

Usage

  1. Add with "spawn"; or with "spawn_glib"; to your project file.
  2. Create a process object:
    P : Spawn.Processes.Process;
  3. Assign program name
    P.Set_Program ("/bin/bash");
  4. (Optional) Assign command line arguments, working directory, environments variables.
  5. Assign an event listener
    P.Set_Listener (L'Unchecked_Access);
  6. Start the process:
    P.Start;
  7. (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

State diagram

Next diagram shows process states and emited events during its life:

state diagram

You should NOT finalize process object until it in Not_Running state.

Maintainer

AdaCore

Contribute

Feel free to dive in! Open an issue or submit PRs.

License

Apache-2.0 © AdaCore