PROCESS objects are the bridge between IBM MQ triggering and your applications. When a triggered queue needs work, the queue manager does not guess which binary to run—it looks up the PROCESS object named on the queue and hands APPLICID to the trigger monitor. Beginners often fix TRIGGER and TRIGTYPE on the queue but leave PROCESS undefined or APPLICID pointing to a path that does not exist on the server. Messages pile up on the application queue while initiation queue shows trigger messages and AMQERR complains about start failures. This tutorial explains DEFINE PROCESS, each attribute's effect, platform differences for APPLICID and APPLTYPE, ENVDATA and USERDATA, altering PROCESS objects safely, and how PROCESS fits with TRIGDATA and the trigger monitor.
Put on triggered queue → trigger message to INITQ → trigger monitor reads message → looks up PROCESS → starts APPLICID with environment from ENVDATA/USERDATA/TRIGDATA → application connects and MQGETs. A break anywhere in the chain looks like "triggering broken" but only the PROCESS step may be wrong.
| Attribute | Purpose | Example |
|---|---|---|
| APPLICID | Program or script to execute | /opt/mq/consume.sh |
| APPLTYPE | How QM starts the program | UNIX, WINDOWS, CICS |
| ENVDATA | Environment string for started job | LANG=en_US |
| USERDATA | Opaque data for application | POOL=2,REGION=UK |
| DESCR | Documentation only | Order consumer v3 |
123456DEFINE PROCESS('PAY.CONSUMER') APPLICID('/app/bin/pay_consume') + APPLTYPE(UNIX) USERDATA('LOG=info') ENVDATA('HOME=/app') ALTER PROCESS('PAY.CONSUMER') USERDATA('LOG=debug') DISPLAY PROCESS('PAY.CONSUMER') ALL DEFINE QLOCAL('PAY.IN') TRIGGER(YES) TRIGTYPE(FIRST) + PROCESS('PAY.CONSUMER') INITQ('SYSTEM.DEFAULT.INITIATION.QUEUE')
APPLICID must be executable by the user under which the trigger monitor runs—often mqm on Linux. Permissions, SELinux contexts, and missing interpreters (#!/bin/bash) cause silent-looking failures. On Windows, APPLICID may be a .exe path; on z/OS, follow IBM samples for APPLTYPE and stub modules.
APPLTYPE tells the queue manager how to invoke APPLICID. UNIX starts shell scripts and binaries per POSIX rules on Linux. WINDOWS uses Windows process creation. CICS and other mainframe types use platform-specific starters. Using UNIX on a script without execute bit fails. Copy PROCESS definitions between platforms only after rewriting APPLICID and APPLTYPE—never assume identical syntax.
Shared PROCESS reduces maintenance: one consume.sh handles ORDERS.IN, RETURNS.IN, and ADJUSTMENTS.IN with different TRIGDATA on each queue. The script reads TRIGDATA or environment to open the correct queue name. Avoid hard-coding a single queue inside the script when multiple queues share PROCESS— that breaks the second queue silently.
The started application runs as a platform user determined by trigger monitor configuration—not automatically as the putting user. Grant the runtime user MQ connect and queue authority. Starting /bin/sh from PROCESS is a security-sensitive change control item—validate paths and arguments to prevent command injection via TRIGDATA if scripts are poorly written.
The PROCESS object is the name tag on a work order telling the factory which machine to start. The queue is the inbox; the trigger monitor is the supervisor; PROCESS is the tag saying run Machine B.
When the bell rings for mail, PROCESS is the note that says which friend to call to pick up the mail. If the note has the wrong name, nobody comes even though mail is waiting.
Define PROCESS and queue; break APPLICID path; fix using AMQERR clues.
Design one PROCESS serving three queues with distinct TRIGDATA values.
Document APPLTYPE and run-as user for your platform in a runbook table.
1. PROCESS object tells MQ:
2. Queue references PROCESS via:
3. APPLTYPE indicates:
4. Wrong APPLICID causes: