Search code examples
linuxeventsipcblocking

In Linux, I'm looking for a way for one process to signal another, with blocking


I'm looking for a simple event notification system:

  1. Process A blocks until it gets notified by...

  2. Process B, which triggers Process A.

If I was doing this in Win32 I'd likely use event objects ('A' blocks, when 'B' does a SetEvent). I need something pretty quick and dirty (prefer script rather than C code). What sort of things would you suggest? I'm wondering about file advisory locks but it seems messy. One of the processes has to actively open the file in order to hold a lock.


Solution

  • Quick and dirty?

    Then use fifo. It is a named pipe. The process A read from the fifo's FD with blocking mode. The process B writes to it when needed.

    Simple, indeed.

    And here is the bash scripting implementation:

    Program A:

    #!/bin/bash
    
    mkfifo /tmp/event
    while read -n 1 </tmp/event; do 
        echo "got message";
    done
    

    Program B:

    #!/bin/bash
    echo -n "G" >>/tmp/event
    

    First start script A, then in another shell window repeatedly start script B.