Questions tagged «fork»

`fork()`函数是Unix / Linux / POSIX方法,通过复制调用过程来创建新过程。

24
父母退出后如何使子进程死亡?
假设我有一个进程,它恰好产生了一个子进程。现在,当父进程出于某种原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死亡。如何正确地做到这一点? 一些关于stackoverflow的类似问题: (如前所述)当父进程退出时,如何导致子进程退出? (稍后询问)在杀死父进程时,是否会自动杀死使用fork()创建的子进程? 有关Windows的 stackoverflow的一些类似问题: 如何在Windows中自动销毁子进程? 当父进程被杀死时杀死子进程
209 c  linux  unix  process  fork 


5
fork(),vfork(),exec()和clone()之间的区别
我一直想在Google上找到这四个之间的区别,我希望这方面会有大量的信息,但是这四个调用之间确实没有任何可靠的比较。 我着手尝试汇编一下这些系统调用之间的区别的基本概况,这就是我得到的。所有这些信息是否正确/我是否缺少任何重要信息? Fork :fork调用基本上是对当前过程进行重复,几乎在每种方式上都是相同的(例如,并非在所有实现中都复制了所有内容,例如,在某些实现中资源有限,但其想法是创建尽可能接近的副本)。 新进程(子进程)获得不同的进程ID(PID),并将旧进程(父进程)的PID作为其父进程PID(PPID)。因为这两个进程现在正在运行完全相同的代码,所以它们可以通过fork的返回码来确定哪个是哪个-子代为0,父代为子代的PID。当然,假设fork调用有效,这就是全部-如果无效,则不会创建任何子代,并且父代会获得错误代码。 Vfork:vfork和fork之间的基本区别是,当使用vfork()创建新进程时,父进程会暂时挂起,子进程可能会借用父进程的地址空间。这种奇怪的状态一直持续到子进程退出或调用execve(),此时父进程继续运行。 这意味着vfork()的子进程必须小心,以免意外修改父进程的变量。特别是,子进程一定不能从包含vfork()调用的函数中返回,也一定不能调用exit()(如果需要退出,则应该使用_exit();实际上,对于子进程也是如此)普通fork()的形式。 Exec :exec调用是用新程序基本上替换整个当前过程的方法。它将程序加载到当前进程空间并从入口点运行它。exec()将当前进程替换为函数所指向的可执行文件。除非有exec()错误,否则控制权永远不会返回到原始程序。 Clone :克隆(作为分叉)创建一个新进程。与fork不同,这些调用允许子进程与调用进程共享其执行上下文的各个部分,例如内存空间,文件描述符表和信号处理程序表。 当使用克隆创建子进程时,它将执行功能应用程序fn(arg)。(这与fork不同,fork从原始fork调用的位置开始在子级中继续执行。)fn参数是指向函数的指针,该函数在子进程执行开始时即被调用。arg参数传递给fn函数。 当fn(arg)函数应用程序返回时,子进程终止。fn返回的整数是子进程的退出代码。子进程也可以通过调用exit(2)或在接收到致命信号后显式终止。 信息表: fork和exec之间的区别 http://www.allinterview.com/showanswers/59616.html http://www.unixguide.net/unix/programming/1.1.2.shtml http://linux.about.com/library/cmd/blcmdl2_clone.htm 感谢您抽时间阅读 !:)
198 linux  process  fork  exec  clone 

3
fork()分支比预期更多?
考虑以下代码: #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i = 0; i < 2; i++) { fork(); printf("."); } return 0; } 该程序输出8个点。那怎么可能呢?应该不应该有6个点?
186 c++  c  fork 

4
在GitHub上有一个公共仓库的私有分支?
我在GitHub存储库中有一个公共的PHP项目,其中仅包含一个分支(主机)。 我想拥有一个对我来说是私有的单独分支/叉(我已经为私有GitHub存储库付费)。我希望能够合并从私有分支/分支到公共仓库的更改,反之亦然。 考虑到这一点,这是我的问题: 我可以在公共回购中设立私人分支吗? 我可以将自己的公共存储库分叉到自己的私有分支/叉中吗? 如果以上两种情况均可行,哪种方法最好?如果没有,我应该如何进行?
126 github  git-branch  fork 


5
如何在C语言中的Linux中使用共享内存
我的一个项目有一个问题。 我一直在尝试找到一个有据可查的使用共享内存的例子,fork()但是没有成功。 基本上情况是,当用户启动程序时,我需要在共享内存中存储两个值:current_path(它是一个char *)和file_name(它也是char *)。 根据命令参数,将启动一个新进程fork(),该进程需要读取和修改共享内存中存储的current_path变量,而file_name变量为只读。 是否有关于共享内存的很好的教程,并带有示例代码(如果可能),您可以将其引导至?
117 c  linux  fork  shared-memory 

5
拉请求而不分叉?
下面是从主题代码贡献的步骤“ 如何在GitHub上其他的代码贡献? ” 分叉项目 对存储库进行一个或多个注释良好并干净的提交。如果要修改多个零件或特征,则可以在此处建立新分支。 在github的网络界面中执行拉取请求。 是否可以在不派生仓库的情况下发出拉动请求? 这是很可悲的看到我的帐户超过20个回购其被叉了一些引入请求。他们那时没有活动,并且零星/关注者。看起来我只是在复制某人的代码,度过了一个黑夜。
105 git  github  fork  repository 



2
fork:重试:资源暂时不可用
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow的主题。 7年前关闭。 改善这个问题 我尝试在计算机上安装Intel MPI Benchmark,但出现此错误: fork: retry: Resource temporarily unavailable 然后,我又收到此错误,当我跑ls和top命令。 是什么导致此错误? 我的机器配置: Dell precision T7500 Scientific Linux release 6.2 (Carbon)
80 linux  fork  mpi  intel 

4
如何更改我从哪个分叉的GitHub项目?
我创建了一个项目,进行了一些更改,并接受了请求请求。但是现在,我分叉的项目移至另一个存储库,并且是该存储库的分支。 那是: Original -> MyFork 现在: NewOriginal -> Original -> MyFork 我将如何理解以下内容? NewOriginal -> MyFork
77 git  github  fork 

3
“ fork()”之后的printf异常
操作系统:Linux,语言:纯C 我正在学习一般的C编程,在特殊情况下学习UNIX下的C编程。 printf()使用fork()调用后,我检测到该函数的奇怪行为(对我而言)。 码 #include <stdio.h> #include <system.h> int main() { int pid; printf( "Hello, my pid is %d", getpid() ); pid = fork(); if( pid == 0 ) { printf( "\nI was forked! :D" ); sleep( 3 ); } else { waitpid( pid, NULL, 0 ); printf( "\n%d was …
77 c  linux  unix  printf  fork 


3
视觉上For循环中fork()会发生什么
我一直在试图了解fork()行为。这次在for-loop。观察以下代码: #include <stdio.h> void main() { int i; for (i=0;i<3;i++) { fork(); // This printf statement is for debugging purposes // getppid(): gets the parent process-id // getpid(): get child process-id printf("[%d] [%d] i=%d\n", getppid(), getpid(), i); } printf("[%d] [%d] hi\n", getppid(), getpid()); } 这是输出: [6909][6936] i=0 [6909][6936] i=1 [6936][6938] …
75 c  fork 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.