A process typically ends when the last instruction in the object code file is executed. This is referred to as a normal termination.
However, a process can also terminate prematurely for any of a number of reasons. For example, you can use the DS (Discontinue) system command to terminate a process. A process can also terminate because a flaw in program design causes it to attempt to do something impossible, such as dividing by zero. Additionally, all processes are terminated in the event of a system halt/load. All of these types of terminations are referred to as abnormal terminations because the inference is that something went wrong.
When you initiate a process, you usually want to be able to find out later whether it ran successfully or not. The system provides a number of facilities to help you determine whether the process ran successfully, and why it failed if it was not successful. These facilities include the HISTORYTYPE, HISTORYCAUSE, and HISTORYREASON task attributes, and the program dump facility. These facilities are described in Determining Process History.
Sometimes you might want to rerun a process that terminated abnormally. For example, if the process was terminated by a system halt/load, then the underlying program might be perfectly sound. Restarting the process could enable it to complete its work successfully. However, a number of design issues must be considered for processes that are intended to be restartable. These design issues, and the means of restarting processes, are explained in Restarting Jobs and Tasks.

