'Callback C{self.deferred} with L{None} if C{reason} is a
L{error.ProcessTerminated} failure with C{exitCode} set to L{None},
C{signal} set to C{self.signal}, and C{status} holding the status code
of the exited process. Otherwise, errback with a C{ValueError}
describing the problem.'

def processEnded(self, reason):

    msg(('Child    exited:    %r' % (reason.getTraceback(),)))
    if (not reason.check(error.ProcessTerminated)):
        return self.deferred.errback(ValueError(('wrong    termination:    %s' % (reason,))))
    v = reason.value
    if isinstance(self.signal, str):
        signalValue = getattr(signal, ('SIG' + self.signal))
    else:
        signalValue = self.signal
    if (v.exitCode is not None):
        return self.deferred.errback(ValueError(('SIG%s:    exitCode    is    %s,    not    None' % (self.signal, v.exitCode))))
    if (v.signal != signalValue):
        return self.deferred.errback(ValueError(('SIG%s:    .signal    was    %s,    wanted    %s' % (self.signal, v.signal, signalValue))))
    if (os.WTERMSIG(v.status) != signalValue):
        return self.deferred.errback(ValueError(('SIG%s:    %s' % (self.signal, os.WTERMSIG(v.status)))))
    self.deferred.callback(None)
