fork - create a child process
功能:创建一个子进程
原型:pid_t fork(void);
参数:无
返回值:
该函数共返回俩次,一个返回值为0,若返回值为0,则是进入子进程
另一个返回值>0,该返回值代表是进入父进程,且该大于0的值就是
子进程的进程PID
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
pid_t pid;
pid = fork();
printf("pid = %d\n",pid);
return 0;
}
运行结果:
pid = 30094
pid = 0
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
pid_t pid;
// printf("before fork %d\n",getpid());
pid = fork();
if(pid > 0){
printf("this is father,pid = %d getpid()=%d\n",pid,getpid());
}else{
printf("this is child,pid = %d getpid()=%d\n",pid,getpid());
}
return 0;
}
运行结果
this is father,pid = 29831 getpid()=29830
this is child,pid = 0 getpid()=29831
getpid()用于获取当前进程的pid
首先了解一下什么是进程,进程就是一个程序跑起来,Linux下./a.out
运行一个程序,程序的运行就是一个进程,程序运行结束该进程就结束
第一个案列程序直接fork,但结果共打印了俩次结果,相当于调用了
俩次printf,可以错误理解为就是该程序跑了俩次
实际是fork()之后是创建一个子进程,可以理解为fork之后,类似于打开
了俩个管道,一个是父进程,一个是子进程,程序会将fork之后的代码
通过父子进程这两个管道分别执行一遍。结合fork返回值看第二个案列程序,
可以得出:
fork用于创建一个子进程,fork之后将代码复制一份给子进程,通过判断fork的两个返回值可以进入不同的进程,一个返回值大于0(这是子进程的pid),另一个返回值等于0
ps aux 查看当前所有运行程序的运行状态
ps aux|gerp init 检索目前所有带有init字段的程序的运行状态
top 查看当前多有程序资源占用情况