How to end simulation when there are forever-loops in sequence and monitor?

In reply to UVM_LOVE:

The advice “don’t use forever statements” is incorrect. All run_phase tasks in all components get killed when the last objection drops. You would not put a raise/drop objection around a forever loop like those used in a monitor or driver unless there was some condition to break out of the forever loop.