mdm-master uses the iospec file to decide whether two commands interfere with each other, and it only
runs two commands at the same time if they do not interfere.
Each line of the iospec file specifies the I/O behavior of a program, unless the line starts with a '#'
character, in which case the line is treated as comments and ignored. The format is as follows:
programspecspec...program names the program whose behavior you are specifying. For each spec element, the first character
indicates usage, and the remaining characters indicate resource.
A resource that starts with a '-' character represents the argument of the corresponding program option.
A resource that is an empty string represents a program argument. A resource that is not empty and does
not start with a '-' character represents the resource string itself.
A usage is typically an upper-case character. If two commands access the same resource with different
usage, mdm-master will not run these two commands at the same time. Furthermore, if a command access a
resource with ´W´ usage, mdm-master will not run it with any command that access the same resource in any
way (including 'W'). There is a special case: if usage is '0' and resource starts with a '-' character,
it means that the resource program option does not take any arguments.
All programs has an implicit spec 'Rglobal', so if you mark a program as 'Wglobal', it will not run while
any other command is running.
Here is an example to help clarify matters. Suppose we have the following iospec file:
cc W-o 0-c R
rm W
Then these two commands can run at the same time:
cc -o pa pa.o lib.o
cc -o pb pb.o lib.o
These two commands cannot run at the same time:
cc -o pa.o -c pa.c
cc -o pa pa.o lib.o
And these two commands also cannot run at the same time:
cc -o pa pa.o lib.o
rm pa