fork() and exec()
Jeff Haran
jharan at bytemobile.com
Mon Feb 6 14:27:07 EST 2012
> -----Original Message-----
> From: kernelnewbies-bounces at kernelnewbies.org [mailto:kernelnewbies-
> bounces at kernelnewbies.org] On Behalf Of Vijay Chauhan
> Sent: Monday, February 06, 2012 11:08 AM
> To: kernelnewbies at kernelnewbies.org
> Subject: fork() and exec()
>
> 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<stdio.h>
> #include<unistd.h>
> #include<sys/types.h>
> #include<stdlib.h>
>
> 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
> );
> scanf("inside child provide a %d", &a);
> 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);
> wait(NULL);
> printf("Wait over\n");
> printf("Inside parent a=%d\n", a);
> }
> return 0;
> }
>
> When i run this program, it gives following output:
> [vijay at localhost]$ ./a.out
> Inside parent, going to wait
> Inside child
> child pid=2775, parentid=2774
> my pid=2774, parentid=2681
> top: unknown argument '>'
> usage: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user]
> -p pid [,pid ...]
>
> 10
> Wait over
> Inside parent a=-1
> [vijay at localhost]$
>
> Why the child scanf and printf not executed?
Because when you called execl(), the code in the child was replaced by
the top executable. execl() replaces the code calling it. The only way
code following a call to execl() or its siblings will ever execute is if
the call to execl() is unsuccessful, for instance, fails to find the top
program in the current path.
> In the parent program, i expected input parent should be printed. But
> it doesnt and just wait for some input. When i entered 10 it resumes
> but printing -1 as a value.
Your scanf() is expecting input that looks something like this:
input parent 10
You just entered 10, so the format string didn't match input and the
variable "a" was never assigned.
Jeff Haran
> Could anyone please help me to understand this behavior? or any good
> tutorial or book
>
> Thanks.
> Vijay
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
More information about the Kernelnewbies
mailing list