s6
Software
skarnet.org

# The s6-ftrig-listen1 program

s6-ftrig-listen1 subscribes to a fifodir, then spawns a program, then waits for a pattern of events to occur on the fifodir.

s6-ftrig-listen1 acts just as s6-ftrig-wait, except it can make sure that the process sending the notifications is actually started after there is a listener for those events.

## Interface

         s6-ftrig-listen1 [ -t timeout ] fifodir regexp prog...

- s6-ftrig-listen1 subscribes to fifodir
- It then forks and exec prog... with all its arguments
- It waits for the series of events received on fifodir to match regexp. regexp must be an Extended Regular Expression.
- When the series of read events matches regexp, s6-ftrig-listen1 prints the last event it received to stdout (one byte followed by a newline), then exits 0.

## Options

- `-t timeout` : if the events on fifodir have not matched regexp after timeout milliseconds, print an error message on stderr and exit 1. By default, s6-ftrig-listen1 waits indefinitely for a matching series of events.

## Usage example

The following sequence of shell commands has a race condition:

In terminal 1:

    s6-mkfifodir /tmp/toto
    s6-ftrig-wait /tmp/toto "message"

Then in terminal 2

    s6-ftrig-notify /tmp/toto message

Depending on the operating system's scheduler, there is the possibility that the s6-ftrig-notify process starts sending "message" before the s6-ftrig-wait process has actually subscribed to `/tmp/toto`, in which case the notification will be missed. The following sequence of shell commands accomplishes the same goal in a reliable way, without the race condition:

    s6-mkfifodir /tmp/toto
    s6-ftrig-listen1 /tmp/toto "message" s6-ftrig-notify /tmp/toto message