Szerintem az a tuti megoldás, hogy az X programban felveszel a signal handlert, ami olvas a pipeból, és ha adatot küldtél bele, akkor triggereled az olvasást. Egyrészt erőforráskímélő, másrészt sosem fog olvasni, ha nincs adat.
Mellesleg nem kellene egyszerűen blokkolódnia a read pipe-ra, míg nem érkezik adat? Szerintem valami szőr van a palacsintában.