I don't follow, how is relying on the underlying operating environment faster and more readable/reliable than something like:

    ...
        @staticmethod
        def send_sigs(signals_sequence, pid):
            for sig in sigs:
                os.kill(pid, sig)

    ...   
        self.sub_stuff['send_sigs_args'].append((signals_sequence, pid))
    ...
        for signals_sequence, pid in self.sub_stuff['send_sigs_args']:
            self.sub_stuff['kill_results'].append(send_sigs(signals_sequence, pid))

That also solves the need to store an inconsistent sentinel types, since this won't kill anything:

    self.sub_stuff['send_sigs_args'].append(([], -1))

Testing for that sentinel is also simple since your ``kill_results`` indexes match your ``send_sigs_args``.  If they don't, it's an error that needs to throw an exception.