I'm curious, isn't there a race condition in the WCE method, where:
(1) The child terminates normally, never having received SIGINT.
(2) The parent receives SIGINT before it reaches the wait() call, or while in the wait() call but before the child termination is picked up (I suppose in the later case wait() might fail and be restarted).
(3) Once the parent sees that the child terminated normally, it does not exit, and SIGINT was effectively ignored.