fork: 复制父进程,创建子进程。于是,有2个进程在运行。
例:
#include ;
int main()
{
printf("Hello");
fork();
return 0;
}
运行结果:
输出HelloHello
如果在hello后面加个\n就会是一个hello。
没有\n时候,printf函数并没有把字符输出到终端,而是保存在缓冲区中,直到程序退出的时候才printf出来,此时调用fork后,显然子进程把父进程的空间都copy过来,包括缓冲区中的内容,所以就出现了两次hello。
例:
int main()
{
int var;
pid_t pid;
if(( pid = fork() ) < 0 )
{
fprintf(stderr, "fork error\n");
}
else if(pid == 0)
{
printf("child process\n");
//while(1);
exit(0);
}
else
{
sleep(2);
printf("father process\n");
while(1);
}
return 0;
}
父进程不在后台运行。如果把while(1)加在子进程pid==0中,去掉父进程while(1),子进程在后台运行,可用ps查看到。
在子进程中fork()返回0:
/*
* Return child pid to parent process,
* marking us as parent via retval[1].
*/
retval[0] = p2->p_pid;
retval[1] = 0;
return (0);
创建线程用pthread_create
参考链接:
阅读(1627) | 评论(0) | 转发(0) |