From mboxrd@z Thu Jan 1 00:00:00 1970 From: bernd@petrovitsch.priv.at (Bernd Petrovitsch) Date: Tue, 07 Feb 2012 16:40:13 +0100 Subject: fork() and exec() In-Reply-To: References: Message-ID: <1328629213.25984.123.camel@thorin> To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org On Die, 2012-02-07 at 00:38 +0530, Vijay Chauhan wrote: > Hi List, > > I am learning Linux and trying to understand exec and fork function. > execl says that it overlays the running address space. What does it mean? > > I created the following program and used top command with > intentionally wrong arguments: > > #include > #include > #include > #include > > int main(){ > int a = -1; > if(fork()==0){ > printf("Inside child\n"); > printf("child pid=%d, parentid=%d\n", getpid(), getppid()); > execl("/usr/bin/top", "/usr/bin/top", ">/dev/null" ,(char*)0 ); You get here only if the execl() as such fails. > scanf("inside child provide a %d", &a); You should check the return value here if you actually got a matching parameter. scanf() is actually a function to be avoided. > printf("Inside child a=%d\n", a); > exit(1); > } else { > printf("Inside parent, going to wait\n"); > printf("my pid=%d, parentid=%d\n", getpid(), getppid()); > scanf("input parent %d\n", &a); You should check the return value here if you actually got a matching parameter. scanf() is actually a function to be avoided. > wait(NULL); You should check the return value here to know why "wait()" returns. > printf("Wait over\n"); > printf("Inside parent a=%d\n", a); > } > return 0; > } Bernd -- Bernd Petrovitsch Email : bernd at petrovitsch.priv.at LUGA : http://www.luga.at