Use a SIGCHLD handler instead of ignoring the signal. This avoids lockups when child processes were inherited (e.g. from .xsession) but new children are waited for in system().
ctwm-4.1.0