查询fork()函数有以下几种返回值
1.在父进程中,fork返回新创建子进程的进程ID;
2.在子进程中,fork返回0;
3.如果出现错误,fork返回一个负值。
总是不理解进行试验验证
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
int main(int argc, int** argv)
{
pid_t pid;
pid_t ppid = getppid();
pid_t cpid = getpid();
int count=0;
printf("main process id is:%d,parent procees id is:%d before fork()\n", cpid, ppid);
pid = fork();
if(pid<0){
printf("fork() error\n");
}else if(pid==0){
printf("pid value of fork() in child process is :%d\n", pid);
ppid = getppid();
cpid = getpid();
printf("child process id is:%d,parent procees id is:%d in child process\n", cpid, ppid);
}else{
printf("pid value of fork() in main process is :%d\n", pid);
ppid = getppid();
cpid = getpid();
printf("main process id is:%d,parent procees id is:%d after fork()\n", cpid, ppid);
}
return 2;
}
执行结果
由结果知fork()在不同的进程中返回的结果是不同的子进程中返回的是0,父进程中返回的是子进程id。main进程总是由3203这个进程创建查看进程列表3203 是shell进程
子进程中为什么有时会出现父进程id为1,这是因为父进程(main)可能在子进程运行起来的时候已经运行结束了,这是子进程没有了父进程,子进程变成了孤儿进程,孤儿进程的父进程都会变成init进程儿init进程id就是1