example 8-6: interprocess callback