This is a process manager package that allows for the execution of processes as well as a simple visualization of their resource consumption and standard output. There are two main modules, task_minion and task_master. The minion includes a Tkinter GUI that allows for the selection and interaction with a set of tasks from a predefined list. Tasks can be processes or groups of processes. The master is a python module responsible for executing commands.
Note: The names of the minion and master modules should be switched. The package evolved such that the original names no longer make sense. That will be sorted out once everything is a little farther along.
This project is in alpha at the moment. However, if you decide you would like to experiment with it, here are some basic setup instructions.
mkdir -p task_manager_ws/src
cd task_manager_ws/src
git clone http://github.com/jakeware/task_manager_ros.git
cd ../
catkin init
catkin build
source ./devel/setup.bash
roscore
roslaunch task_manager_ros task_master_ros_node.launch
roslaunch task_manager_ros task_minion_ros_node.launch
The process list can be found in task_manager_ros/cfg/task_config.yaml. Each process is defined by the following components.
- Name: Each yaml entry is defined by a top-level process name.
- Command: Command for execution as if you were running the process on the command line.
- Group (optional): Group that the command belongs to.
- Dependencies (not yet implemented): List of dependencies that must be running before this process can be started.
The GUI supports the following commands. Note that when a group is selected, the group and its children become active and are high-lighted. You can control an active task or task group by selecting the row and issuing a start or stop command.
- Cursor Up [Up]: Move task cursor up one row.
- Cursor Down [Down]: Move task cursor down one row.
- Start Selected [Ctrl-s]: Start only selected tasks or groups. Do nothing for active tasks that are not selected.
- Stop Selected [Ctrl-k]: Stop only selected tasks or groups. Do nothing for active tasks that are not selected.
- Start Active [Ctrl-S]: Start only active tasks or groups (i.e. those in the current cursor row and its children).
- Stop Active [Ctrl-K]: Stop only active tasks or groups (i.e. those in the current cursor row and its children).
- Toggle Select [Ctrl-a]: Select all tasks that are currently active (highlighted). If only some currently active tasks are selected, select the rest. If all are already selected, deselect all.
- Toggle Select All [Ctrl-A]: Select all tasks (or deselect if all are already selected).
- Clear Output [Ctrl-l]: Clear text output window for the current cursor row.
Here are the objectives for this package.
- Limited dependencies outside of those found in the default python version of Ubuntu LTS
- Capable of starting and stopping both individual and groups of processes
- Display process load for every process
- Display memory consumption for every process
- Display current state (running, stopped, etc.) for every process
- Display separate standard output stream for every process
- Use a simple YAML configuration file (No XML)
- Provide a ROS message passing framework
- Provide a non-GUI interface for headless operation on build servers
- Start and stop ROS launch files correctly
- (Untested) Allow for nested process groups
- (Not Implemented) Enforce a dependency structure when starting a set of processes
- (Not Implemented) Handle ROS parameter parsing to define args to nodes and launch files
Although there are several existing process managers, none of them satisfied the requirements listed above.. Here is a list of the other packages that we considered using.