fork 函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。这两个分别带回它们各自的返回值,其中父进程的返回值是子进程的进程号,而子进程则返回0。因此,可以通过返回值来判定该进程是父进程还是子进程。
fork()函数
头文件:#include
格式: pid_t fork();
返回值:0:子进程
子进程ID(大于0的整数):父进程
-1:出错
子进程是父进程的拷贝,它具有和父进程相同的代码段,但是它具有自己的数据段和堆栈段。
子进程将从父进程获得绝大部分属性,但也会更改部分属性的值,要更改的属性为:
– 进程ID
– 进程组ID(更改为父进程ID)
–SESSION ID(为子进程的运行时间记录)
– 所打开文件及文件的偏移量(父进程对文件的锁定)
/*fork.c*/
#include
#include
#include
#include
int main(void)
{
pid_t result;
/*调用fork函数,其返回值为result*/
result = fork();
/*通过result的值来判断fork函数的返回情况,首先进行出错处理*/
if(result == -1)
{
perror("fork");
exit;
}
/*返回值为0代表子进程*/
else if(result == 0)
{
printf("The return value is %d\nIn child process!!\nMy PID is%d\n",result,getpid());
}
/*返回值大于0代表父进程*/
else
{
printf("The return value is %d\nIn father process!!\nMy PID is%d\n",result,getpid());
}
return 1;
}
编译源文件fork.c并在板子上运行
先在上位机编译源文件:
进入/nfs/project目录下
[root@localhost project]# arm-linux-gcc fork.c -o fork
将可执行程序下载到目标板上,运行结果如下所示:
阅读(1130) | 评论(0) | 转发(0) |