I'm doing an assignment on fork(),exec() and related UNIX calls where I need to show the zombie state of a (child) process. Here's the relevant piece of code:
pid = vfork(); //used vfork() for showing z state
if(pid>0)
{
(some sorting code)
execl("/bin/ps","/bin/ps","a",(char*)0);
}
What I expect is:
(child's output)
(parent's output)
(Output of the ps command where I then would be able to show a 'defunct' entry)
What I get is:
(child's output)
(parent's output)
No ps command output. Instead I get: Signal 17 (CHLD) caught by ps (procps version 3.2.8)
However, when sleep(int time)
(some integer time in seconds) is inserted before the execl
call, I get the desired output and no Signal errors are reported.
What's happening here? Does ps
becomes the new parent of the (as yet-zombie) child?
And why does the ps
command not execute? What does sleep()
do that makes ps
to execute as required?
I'm new to POSIX/Linux programing so any relevance of this SIGCHLD
signal with respect to my particular situation would be appreciated. Thanks!