QCMDEXC leitet alle Nachrichten an seinen Stack an das aufrufende Programm weiter, so dass mittels QMHRCVPM die Nachrichten des eigenen Stacks gelesen werden können.

Das Problem ist hier nur, den richtigen Aufsetzpunkt zu finden. Wenn du nämlich ein QCMDEXC mehrmals ausgeführt hast, must du dir den MSGKEY der letzten gelesenen Nachricht merken und mit diesem wieder aufsetzen, da du sonst vorherige Nachrichten verarbeitest, die mit dem gerade aufgerufenen nichts mehr zu tun haben.

Ich würde die ganze Arbeit des QCMDEXC in ein CLP verlegen, dem man als Parameter die Pfade und einen Fehlercode übergibt.
Das CLP kann dann den CPYFRMSTMF ausführen und mittels RCVMSG und MONMSG diverse Fehlercodes zurückgeben.
So hat dann auch jeder Aufruf wieder seine eigene PGMQ, so dass auch tatsächlich nur Meldungen dieses Aufrufes auftreten können.