From mboxrd@z Thu Jan 1 00:00:00 1970 From: kernel.vijay@gmail.com (Vijay Chauhan) Date: Tue, 7 Feb 2012 00:38:19 +0530 Subject: fork() and exec() Message-ID: To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org 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 ); 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? 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. Could anyone please help me to understand this behavior? or any good tutorial or book Thanks. Vijay