系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。
/*
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
作用:用于创建子进程
返回值:
fork()的返回值会返回两次,一次在父进程中,一次在子进程中
在父进程中,返回创建的子进程的ID
在子进程中,返回0
如何区分父进程和子进程,通过fork的返回值
在父进程中,返回-1表示创建子进程失败,并且设置errno
父子进程之间的关系:
区别:
1.fork()函数的返回值不同
父进程中:>0 返回的子进程的ID
子进程中:=0
2.pcb中的一些数据
当前进程的id pid
当前进程的父进程的id ppid
信号集
共同:
某些状态下:子进程刚被创建出来,还没有执行任何的写数据的操作
-用户区的数据
-文件描述符表
父子进程对变量是不是共享的?
刚开始的时候是一样的,如果修改了数据,就不共享了
读时共享(子进程被创建,两个进程没有做任何的写的操作),写时拷贝
*/
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
//创建子进程
pid_t pid = fork();
//判断是父进程还是子进程
if(pid>0){
printf("pid : %d\n", pid);
//如果大于0,返回的是创建的子进程号,当前是父进程
printf("i am parent process, pid : %d, ppid : %d\n", getpid(), getppid());
}else if(pid==0){
//当前是子进程
printf("i am child process, pid : %d, ppid : %d\n", getpid(), getppid());
}
f