进程的创建
创建一个进程的系统调用很简单.我们只要调用fork函数就可以了 .
#i nclude <unistd.h>
pid_t fork();
当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只 有它的进程ID和父进程ID,其他的都是一样.就象父进程克隆(clone)自己一样.当然创建 两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork的返回 值. 当fork掉用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则 fork的返回值有重要的作用.对于父进程fork返回子进程的ID,而对于fork子进程返回0.我 们就是根据这个返回值来区分父子进程的.
父进程为什么要创建子进程呢?前面我们已经 说过了Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源,重要的是进程是可以并发执行。有时 进程为了早一点完成任务就创建子进程来争夺资源. 一旦子进程被创建,父子进程一起从 fork处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻塞,直 到子进程完成任务.这个时候我们可以调用wait或者waitpid系统调用 .如下例所示:
#include<stdio.h>
#include<stdlib.h>
#include<usistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;/*pid_t其实就是一个int类型*/
pid=fork();
printf("Input the stream when childps &&parentps/n");
if(pid)
{
printf("The chileprocess is running now!/n");
printf("The pid is :%d/n",pid);
}
else
{
printf("The parentprocess is running now!/n");
printf("The pid is :%d/n",pid);
}
return 0;
创建一个进程的系统调用很简单.我们只要调用fork函数就可以了 .
#i nclude <unistd.h>
pid_t fork();
当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只 有它的进程ID和父进程ID,其他的都是一样.就象父进程克隆(clone)自己一样.当然创建 两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork的返回 值. 当fork掉用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则 fork的返回值有重要的作用.对于父进程fork返回子进程的ID,而对于fork子进程返回0.我 们就是根据这个返回值来区分父子进程的.
父进程为什么要创建子进程呢?前面我们已经 说过了Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源,重要的是进程是可以并发执行。有时 进程为了早一点完成任务就创建子进程来争夺资源. 一旦子进程被创建,父子进程一起从 fork处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻塞,直 到子进程完成任务.这个时候我们可以调用wait或者waitpid系统调用 .如下例所示:
#include<stdio.h>
#include<stdlib.h>
#include<usistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;/*pid_t其实就是一个int类型*/
pid=fork();
printf("Input the stream when childps &&parentps/n");
if(pid)
{
printf("The chileprocess is running now!/n");
printf("The pid is :%d/n",pid);
}
else
{
printf("The parentprocess is running now!/n");
printf("The pid is :%d/n",pid);
}
return 0;