Signal Catch Events will only be triggered if they are active when the signal throw event is hit. Think of it like a timer catch event, the flow comes in, it waits for the timer/signal, then it continues on. This won't work because the signal catch event is never active.
You could try something like

which activates the signal catch event right away. The signal throw event would trigger it and start the sub-process, then after the sub-process the catch event would be activated again, waiting for the next signal throw event. The downside here is if you reach another signal throw event before the sub-process has completed, the catch event won't be activated yet and won't fire.
You could also try something like this
The signal catch event is activated right away and the first signal throw will release it and start off the sub-process. We also have a flow from the throw event to the catch event to re-activate directly after it is fired. This method would work, HOWEVER, you might as well just skip the signal events all together and just have a pathway to the sub-process wherever you planned on having a signal throw event. Whenever you need the sub-process run, just draw a flow over there.