c - About vfork() system call? -
#include <stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> #include<stdio.h> #include<stdlib.h> int main() { pid_t child_pid = vfork(); if(child_pid < 0) { printf("vfork() error\n"); exit(-1); } if(child_pid != 0) { printf("hey parent %d\nmy child %d\n",getpid(),child_pid); wait(null); } else { printf("hey child %d\nmy parent %d\n",getpid(),getppid()); execl("/bin/echo","echo","hello",null); exit(0); } return 0; }
output:
hey child 4 parent 3 hey parent 3 child 4 hello
my question : why "hello" printed after execution of parent process? have started learning vfork(). please me this?
after parent process executed, goes wait(null);
blocks parent process until child process calls execl()
or exit
.
therefore child process when parent blocked calling execl()
, hello
being printed in end of output.
#include <stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/wait.h> #include<stdio.h> #include<stdlib.h> int main() { pid_t child_pid = vfork(); if(child_pid < 0) { printf("vfork() error\n"); exit(-1); } if(child_pid != 0) { printf("hey parent %d\nmy child %d\n",getpid(),child_pid); wait(null); } else { printf("hey child %d\nmy parent %d\n",getpid(),getppid()); execl("/bin/echo","echo","hello",null); exit(0); } return 0; }
if remove execl()
child process go exit(0)
, hello
wont printed.
also, after execl()
being executed creating new process code write after execl()
wont executed. according man page:-
the exec() family of functions replaces current process image new process image. functions described in manual page front-ends execve(2). (see manual page execve(2) further details replacement of current process image.)
Comments
Post a Comment