编码实现进程的创建,父进程输出进程号和“I am parent”提示信息;
子进程输出子进程号和”I am son”提示信息。
注意:要在父进程中sleep,等待子进程运行结束,防止父进程先于子进程退出。
用到的函数:fork()、getpid()、getppid()
1)fork函数
当程序调用fork函数时,系统会创建新的进程并为其分配资源;然后,会将原来进程的相关内容全部复制到新的进程中。
fork()函数仅仅被调用一次,但是会返回两次(父子进程各一次)。可以通过返回值来区分父子进程:
返回值为0时,表示子进程。
返回值大于0时,表示父进程,且返回值为新创建的子进程的PID。
返回值小于0时,表示fork出现错误
2)getpid/getppid系统调用
getpid返回当前进程标识,getppid返回父进程标识。
用法:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
运行结果:
linux@ubuntu:~$ ./a.out
i am son ,id is 7049,my parent id is 7048
i am partent ,id is 7048
编码过程中需注意让父进程等待,以防子进程未结束父进程已结束,会出现getppid为1的情况
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
pid_t getpid(void);
pid_t getppid(void);
int main(){
int status;
pid_t pid;
pid = fork();
if(0 == pid){
printf("I am son,id is %d,my parent id is %d\n",getpid(),getppid());
}
else if(0 > pid){
printf("fork failed\n";
}
else{
pid = wait(&status);
printf("I am parent,id id %d\n",getpid());
}
return 0;