Terminate end events are the only kind of terminate events. When a process instance reaches a terminate end event, it terminates all element instances in the same flow scope as the end event.
They are often used to terminate a concurrent flow that is not required anymore. Consider the following example.
The process has two concurrent tasks
C. In the process instance, both tasks are active. We complete the
C. The process instance reaches the terminate end event and cancels the task
On the process scope
A terminate end event on the process scope (i.e. not embedded in a subprocess) terminates all element instances of the process instance. After the termination, the process instance completes.
If the process instance was created by a call activity from a parent process then the call activity completes and the parent process instance takes the outgoing sequence flows.
Inside a subprocess
A terminate end event inside an embedded or an event subprocess terminates all element instances of the subprocess. After the termination, the subprocess completes, and the process instance takes the outgoing sequence flows.
The terminate end event is limited to its subprocess. It doesn't terminate element instances outside the subprocess.
If the subprocess is a multi-instance then the terminate end event terminates only the element instances of the current iteration. It doesn't terminate element instances of other multi-instance iterations.
A terminate end event:
<bpmn:terminateEventDefinition id="TerminateEventDefinition_1" />