What is a zombie?
When a program forks and the child finishes before the parent, the
kernel still keeps some of its information about the child in case the
parent might need it -- for example, the parent may need to check the
child's exit status. To be able to get this information, the parent
calls wait(); when this happens, the kernel can discard the
information.