如何创建进程
平时我们编辑的程序可以利用"if""switch"等进行分支(如下程序)
int main(){
if(.....){
.....;
}else{
......;
}
for(...;....;....){
........;
}
return 0;
}
但这样一个程序终究执行的只有一个任务,想要多任务编程我们需要再创建一个进程,那么怎样才能创建一个进程呢?
fork()函数
我们可以利用fork()函数创建一个新的进程
函数原型:pid_t fork(void);
fork()函数从已存在的进程中创建一个新进程,这个新进程被称为子进程,原进程被称为父进程。子进程是父进程的一个复制品,除了进程号、资源使用、计时器等与父进程不同,其他的全部继承了父进程。
由于子进程复制的父进程,所以父子进程会运行同一程序(子进程在fork()之后,父进程实在main()开始);
那么经历fork()之后如何区分谁是父进程,谁是子进程呢?
利用fork()的返回值不同来判定,父进程中fork()的返回值是子进程的进程号,子进程fork()的返回值是0。
示例代码
int main(){
pid_t pid;
pid = fork();
if(pid < 0){ //返回值小于0出错;
perror("fork");
return 0;
}
else if(pid == 0){ //返回值等于0为子进程;
printf("this is child,pid = %d\n",getpid());//getpid()获取当前进程pid
}
else{ //返回值大于0为父进程;
printf("this is parent,pid = %d\n",getpid());
}
}
ps:每经历一次fork()存在的进程都会创建一个子进程
存在进程的数量=2^n;
n:经历fork()的次数;