fork():无参数,资源全部复制,父进程所有的资源都全部通过数据结构的复制,传递给子进程。
vfork():无参数,除了task_struct结构和系统空间堆栈外,其他的资源全部通过数据结构指针的方式进行复制遗传,所以vfork()出来的是线程而不是进程。vfork()是出于效率的考虑而设计的。
fork与vfork都可以创建一个进程,但vfork是由fork封装得来的。fork是父子进程同时顺序进行,不会中断影响,而vfork是先执行子进程,当子进程结束之后才会执行父进程
1.fork函数
头文件:
#include <sys/types.h>
#include <unistd.h>
函数原型:
pid_t fork(void);
函数参数:
无
函数功能:
创建子进程
返回值:
父进程:返回子进程的pid
子进程:返回0
错误:-1,并且使用perror查看错误信息
核心代码:
int main(int argc, char *argv[])
{
pid_t pid = fork();//创建子进程
if(-1 == pid)
{
perror("fork");
return -1;
}
if(0 == pid)//子进程
{
<