进程控制编程一些示例代码
1.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int pid;
pid = fork();
if(pid > 0)
{
int i = 5;
while(i--)
{
printf("this is parent!\n");
sleep(1);
}
}
else
{
//char *arg[] = {"hello","ls","-al"};
//execl("./hello","hello","ls","-al","/home/lx/0806",NULL);
//execv("./hello",arg);
system("./hello hello ls -al");
printf("this is son!\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t pid;
int count;
pid = fork();
if(pid < 0)
{
perror("fork");
exit(-1);
}
else if(pid > 0)
{
count++;
printf("parent count = %d\n",count);
}
else if(pid == 0)
{
count++;
printf("child count = %d\n",count);
}
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
void die(const char *msg)
{
perror(msg);
exit(-1);
}
void child2_do()
{
printf("In child2 : execute 'date'\n");
sleep(5);
if(execlp("date","date",NULL) < 0)
{
perror("child2 execlp");
}
}
void child1_do(pid_t child2,char *argv)
{
pid_t pw;
do
{
if(*argv == '1')
{
pw = waitpid(child2,NULL,0);
}
else
{
pw = waitpid(child2,NULL,WNOHANG);
}
if(pw == 0)
{
printf("In child1 process :\nThe child2 process has not exit!\n");
sleep(1);
}
}while(pw == 0);
if(pw == child2)
{
printf("Get child2 %d.\n",pw);
sleep(5);
if(execlp("pwd","pwd",NULL) < 0)
{
perror("child1 execlp");
}
}
else
{
printf("error occured!\n");
}
}
void father_do(pid_t child1,char *argv)
{
pid_t pw;
do
{
if(*argv == '1')
{
pw = waitpid(child1,NULL,0);
}
else
{
pw = waitpid(child1,NULL,WNOHANG);
}
if(pw == 0)
{
printf("In father process :\nThe child1 process has not exit!\n");
sleep(1);
}
}while(pw == 0);
if(pw == child1)
{
printf("Get child1 %d.\n",pw);
sleep(5);
if(execlp("pwd","pwd",NULL) < 0)
{
perror("father execlp");
}
}
else
{
printf("error occured!\n");
}
}
int main(int argc,char *argv[])
{
pid_t child1,child2;
if(argc < 3)
{
printf("Usage : waitpid [1 0] [1 0]\n");
exit(1);
}
child1 = fork();
if(child1 < 0)
{
die("child1 fork");
}
else if(child1 == 0)
{
child2 = fork();
if(child2 < 0)
{
die("child2 fork");
}
else if(child2 == 0)
{
child2_do();
}
else
{
child1_do(child2,argv[1]);
}
}
else
{
father_do(child1,argv[2]);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int pid;
int i;
int fpid;
printf(" i son/perent ppid pid fpid\n");
for(i = 0;i < 2;i++)
{
pid = fork();
if(pid == 0)
{
printf("%5d son %10d%10d%10d\n",i,getppid(),getpid(),fpid);
}
else
{
printf("%5d parent %10d%10d%10d\n",i,getppid(),getpid(),fpid);
}
}
return 0;
}