Process 需要帮助掌握有关fork()的一些概念
关于fork(),我有几个问题: 1) 我很确定forking允许多个线程访问一个共享地址空间,这对系统来说非常便宜。我还非常确定每个进程都分配了堆栈空间。另外,我不相信调用fork()创建了一个新的进程映像(据我所知,它是使用exec()创建的),我的这些断言对吗 2) 现在有一个非常复杂的问题:在进程上调用fork()是否等同于多线程?像fork()父进程一样,父进程和子进程是否有自己的线程 3) 如果fork()复制父进程,子进程如何知道何时停止fork?即,您有以下简单代码:Process 需要帮助掌握有关fork()的一些概念,process,fork,Process,Fork,关于fork(),我有几个问题: 1) 我很确定forking允许多个线程访问一个共享地址空间,这对系统来说非常便宜。我还非常确定每个进程都分配了堆栈空间。另外,我不相信调用fork()创建了一个新的进程映像(据我所知,它是使用exec()创建的),我的这些断言对吗 2) 现在有一个非常复杂的问题:在进程上调用fork()是否等同于多线程?像fork()父进程一样,父进程和子进程是否有自己的线程 3) 如果fork()复制父进程,子进程如何知道何时停止fork?即,您有以下简单代码: #incl
#include
int glob=6;
char buf[]="a write to stdout\n";
main()
{
int var;
int pid;
var=88;
printf("Before Fork\n");
if((pid=fork())<0)
printf("fork Error\n");
else if(pid==0)
{
glob++;
var++;
}
else
printf("\nPID= %d ,GLOB = %d,VAR = %d\n",getpid(),glob,var);
exit(0);
}
#包括
int-glob=6;
char buf[]=“写入标准输出\n”;
main()
{
int-var;
int-pid;
var=88;
printf(“Fork\n之前”);
简而言之,如果((pid=fork()):
分叉不允许分叉进程(其子进程)更改父进程数据。分叉新进程后,它将获得父进程描述符(其数据、文件描述符等)的副本.Forking并不便宜。由于涉及复制,它实际上是一个非常昂贵的操作。Forking进程是其父进程的副本,堆栈也是一个副本。exec()
“only”加载并执行新代码,因为您所指的“进程映像”已在fork期间创建
分叉父进程会创建一个子进程。父进程可以有线程,子进程也可以有线程。父进程的线程不能与子进程的线程干涉。在双核cpu上,一个核可以运行父进程,而另一个核可以并行运行子进程。如果父进程进程有一个线程在运行,那么一个内核可以运行父进程,而另一个内核可以并行运行父进程的线程
阅读一本书或查找一些教程。在做任何其他事情之前,了解fork系统调用时发生的情况应该非常清楚。一个简单的谷歌搜索将为您提供丰富的信息,例如以下内容
简言之:
分叉不允许分叉进程(其子进程)更改父进程数据。分叉新进程后,它将获得父进程描述符(其数据、文件描述符等)的副本.Forking并不便宜。由于涉及复制,它实际上是一个非常昂贵的操作。Forking进程是其父进程的副本,堆栈也是一个副本。exec()
“only”加载并执行新代码,因为您所指的“进程映像”已在fork期间创建
分叉父进程会创建一个子进程。父进程可以有线程,子进程也可以有线程。父进程的线程不能与子进程的线程干涉。在双核cpu上,一个核可以运行父进程,而另一个核可以并行运行子进程。如果父进程进程有一个线程在运行,那么一个内核可以运行父进程,而另一个内核可以并行运行父进程的线程
阅读一本书或查找一些教程。在做任何其他事情之前,了解fork系统调用时发生的情况应该非常清楚。一个简单的谷歌搜索将为您提供丰富的信息,例如以下内容