Most process abstractions support processes being destroyed when the program terminates, or in response to a specific kill directive. There are two common implementations, one a "poison pill" where the process is sent a command to kill itself, and the other where the system itself kills the process, not permitting the process to execute further at all. What actions need to be taken when a program terminates or a process is killed? What if that process destruction is not the consequence of normal process termination, but rather is the consequence of software failure?