int fork()
- 功能:创建一个子进程
- 返回值:0-创建成功,-1-创建进程失败,>0-创建进程成功,返回返回子进程id
int wait(int * status)
- 功能:将调用的进程挂起,等待子进程运行结束
- 参数:指向整数的指针,0-子进程正常结束,非0-出现运行有误
- 返回值:调用正常-子进程id,调用进程无子进程-调用失败,返回-1
int exit()
- 功能:终止进程的执行
- 返回值:无
sleep(n)
- 功能:进程随眠1秒
- 参数:n-随眠时间
实例代码
1.1 父进程创建子进程,分别循环输出"I am parent."和"I am child."5次,每次输出一次后使用sleep(1)延时1s。
#include<stdio.h>
#include<unistd.h>
/*
1_1.c
父进程创建子进程,分别循环输出
"I am child."和"I am parent."
每输出一次随眠1s。
*/
main()
{
int p;
while((p=fork())==-1);
if(p==0)
{/*子进程块*/
int i;
for(i=0;i<5;i++)
{
printf("I am child.\n");
sleep(1);
}
}
else
{/*父进程块*/
int i;
for(i=0;i<5;i++)
{
printf("I am parent.\n");
sleep(1);
}
}
}
1.2 在1.1的基础上利用exit()和wait()实现父子进程间的同步。
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
/*
简单的进程同步:
父进程等待子进程输出后再输出
*/
main()
{
int p;
while((p=fork())==-1);
if(p==0)
{/*子进程块*/
int i;
for(i=0;i<5;i++)
{
printf("I am child.\n");
sleep(1);
}
exit(0);
}
else
{/*父进程块*/
int i;
for(i=0;i<5;i++)
{
wait(0);
printf("I am parent.\n");
sleep(1);
}
}
}