#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
/********************************************************************************
*
* MAIN
*
* getpid(),getppid(),fork(),vfork(),execl(),execlp(),execv(),system(),wait()
*
*
********************************************************************************/
int main()
{
pid_t a;
int count=0;
a=vfork(); //code and data is shared,and the child process run first
// a=fork(); //noly code is shared,the data is copied for child process
count++;
/* creating failed */
if(a<0)
{
printf("Creating a child process is failure!\n");
exit(EXIT_FAILURE);
}
/* father process */
if(a>0)
{
wait(NULL); //wait for the child to finish processing
printf("I'm the FATHER process and my ID is %d\n",getpid());
printf("my child's ID is %d\n",a);
/*if child has been created by vfork(),the count will's be 2,
because of the shared data(count included).obviously,it will
be 1 when child have been created by fork().*/
printf("count=%d\n",count);
}
/* child process */
else if(a==0)
{
char *argv[]={"ls","-l",".",NULL};
printf("I'm the CHILD process and my ID is %d\n",getpid());
printf("my father's ID is %d\n",getppid());
printf("count=%d\n",count);
/* test for exec*(...),to achieve the job of ls -l . */
// execl("/bin/ls","ls","-l",".",NULL); //the program ls will be found according to the directory and the parament will be transmited to ls.
// execlp("ls","ls","-l",".",NULL); //the program ls will be found according to the PATH and the parament will be transmited to ls.
// execv("/bin/ls",argv); //the program ls will be found according to the directory and the parament will be transmited to ls.
/* the most differece between excec*() and system() : the excec*() will replace the proccess who
called them and no return,while the system() will return to the proccess who called them when finished*/
system("ls -l ."); //system() will call for fork() to create a child process to do the job of "ls -l"
printf("I'm sleeping\n");
sleep(5);
}
exit(EXIT_SUCCESS);
}
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
/********************************************************************************
*
* MAIN
*
* getpid(),getppid(),fork(),vfork(),execl(),execlp(),execv(),system(),wait()
*
*
********************************************************************************/
int main()
{
pid_t a;
int count=0;
a=vfork(); //code and data is shared,and the child process run first
// a=fork(); //noly code is shared,the data is copied for child process
count++;
/* creating failed */
if(a<0)
{
printf("Creating a child process is failure!\n");
exit(EXIT_FAILURE);
}
/* father process */
if(a>0)
{
wait(NULL); //wait for the child to finish processing
printf("I'm the FATHER process and my ID is %d\n",getpid());
printf("my child's ID is %d\n",a);
/*if child has been created by vfork(),the count will's be 2,
because of the shared data(count included).obviously,it will
be 1 when child have been created by fork().*/
printf("count=%d\n",count);
}
/* child process */
else if(a==0)
{
char *argv[]={"ls","-l",".",NULL};
printf("I'm the CHILD process and my ID is %d\n",getpid());
printf("my father's ID is %d\n",getppid());
printf("count=%d\n",count);
/* test for exec*(...),to achieve the job of ls -l . */
// execl("/bin/ls","ls","-l",".",NULL); //the program ls will be found according to the directory and the parament will be transmited to ls.
// execlp("ls","ls","-l",".",NULL); //the program ls will be found according to the PATH and the parament will be transmited to ls.
// execv("/bin/ls",argv); //the program ls will be found according to the directory and the parament will be transmited to ls.
/* the most differece between excec*() and system() : the excec*() will replace the proccess who
called them and no return,while the system() will return to the proccess who called them when finished*/
system("ls -l ."); //system() will call for fork() to create a child process to do the job of "ls -l"
printf("I'm sleeping\n");
sleep(5);
}
exit(EXIT_SUCCESS);
}