fork()函数
作用:
产生一个新的进程
该进程在此语句之后,和父进程一起执行fork函数之后的代码
返回值:
子进程会返回一个pid_t的值,为0
父进程会返回一个大于0
的值,实际上是子进程
的pid
内存问题:
fork产生新进程非常快,但产生的新进程
并不
复制原进程
的内存空间
,而是和父进程一起共享内存
,只有当修改内存
时,才会复制
一份新的内存
给该进程单独使用
僵尸进程:
子进程被杀死
,但是父进程继续执行
,有可能
会产生僵尸进程
- 如何解决?
对于程序中由fork字样的代码,一定要有处理sig_chld信号的函数,如何处理,自行百度waitpid()
fork失败的可能性:
- 1、pid = fork() < 0 . 在进程很多的情况下会出现
- 2、每个用户有进程上限
fork()逻辑测试题:
下面代码最后一共有多少个进程?
int main()
{
if ((fork() && fork()) || (fork() && fork())){}
for (;;)
{
sleep(1);
}
}
逻辑导图
执行测试:
bash1中编译,执行
bash2中,查看创建出来的进程数量: