---
name: "mdm.screen"
section: "1"
platform: "linux"
package: "mdm"
version: "0.1.3-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mdm.screen"
---

# mdm.screen(1)

run a command under mdm-master

## NAME

mdm.screen - run a command under mdm-master

## SYNOPSIS

**mdm.screen** \[*-c iospec*\] \[*-n slaves*\] *command*

## DESCRIPTION

**mdm.screen** runs *command* under **mdm-master** so that **mdm-run** commands in *command* can run in parallel.

This program is a part of the Middleman System (mdm).

## OPTIONS

The **mdm.screen** command has two optional options.

- \-c iospec

  The iospec file (see below).

- \-n slaves

  The number of **mdm-slave** process to start (default 6).

## THE IOSPEC FILE

**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:

*program spec spec ...*

*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

## EXIT STATUS

The exit status of **mdm.screen** is 0.

## EXAMPLE

Here is what you do to decompress all files with .gz extension in the current directory tree.

mdm.screen find . -iname '\*.gz' -exec mdm-run gunzip {} \\;

Since we run **find** under **mdm.screen** and invoking **gunzip** under **mdm-run**, we specify that we wish to run the **gunzip** commands in parallel.

## SEE ALSO

[**mdm-run**(1)](/mdm-run/1.md), [**mdm-sync**(1)](/mdm-sync/1.md), [**ncpus**(1)](/ncpus/1.md)
