问题标签 [fork]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
23061 浏览

c++ - 如何告诉 valgrind 对分叉进程进行 memcheck?

我有一个过程x,我想用valgrind. 问题是x由 运行y,而y反过来又由 运行z。我无法x独立运行,因为yz设置了环境x,例如环境变量、命令行开关、所需的文件x等。

  1. 有什么方法可以告诉我valgrind继续运行,z但要遵循它找到的任何分叉并报告它们?
  2. 有什么方法可以告诉我valgrind遵循任何分叉,但只报告名为的进程x
  3. 有什么方法可以告诉我valgrind附加到已经运行的进程,就像我可以用 gdb 做的那样?

我不知道这是否重要,但我在 SuSE64 linux 和 valgrind-2.4.0 下运行。

谢谢!

0 投票
4 回答
6677 浏览

php - PHP / Apache 中的进程分叉是个好主意吗?

我正在用 PHP 编写一个简单的应用程序,它偶尔需要执行一组相当密集的 MySQL 更新。我不特别希望这给用户造成延迟,所以我想知道使用 pcntl_fork()。

我不确定这到底是如何工作的:父进程完成后子进程会继续运行吗?父进程会结束,用户的页面加载会在子进程完成之前完全完成吗?

换句话说,这是让 PHP 脚本(在 Apache 下运行)在不延迟用户的情况下进行一些耗时的更新的安全方法,还是我应该让我的用户忍受一些延迟?

0 投票
1 回答
1234 浏览

python - 用于虚拟主机控制面板应用程序的 CherryPy

很长一段时间以来,我一直想开始一个宠物项目,旨在及时成为一个网络托管控制面板,但主要专注于 Python 托管——这意味着我想为用户提供一种生成/启动 Django 的方法/ 面板中的其他框架项目。我似乎找到了用它来构建我的应用程序的完美工具:CherryPy。

这将允许我按照自己的方式进行操作,使用自己的 HTTP/HTTPS 服务器以及我最喜欢的编程语言构建应用程序。

但是现在出现了一个新问题:由于 CherryPy 是一个线程服务器,它是否适合这种任务?

会有很多耗时的任务,所以如果其中一个任务阻塞,其余试图访问其他页面的用户将等待并最终超时。

我想这种问题不会发生在基于分叉的服务器上。

你有什么建议?

0 投票
4 回答
2651 浏览

php - 如何强制执行最大数量的分叉子项?

编辑:我已经标记了这个 C,希望得到更多的回应。我感兴趣的更多的是理论而不是特定的语言实现。因此,如果您是 C 编码员,请将以下 PHP 视为伪代码,并随时用 C 编写的答案来回应。

我试图通过让它并行而不是串行执行其任务来加速 PHP CLI 脚本。这些任务彼此完全独立,因此它们开始/完成的顺序无关紧要。

这是原始脚本(请注意,为清楚起见,所有这些示例都被剥离):

我已经设法使它与如下所示$items并行工作:pcntl_fork()

现在我想扩展它,以便一次最多有 10 个孩子活跃。处理这个问题的最佳方法是什么?我尝试了几件事,但运气不佳。

0 投票
4 回答
8170 浏览

c - 避免 fork()/SIGCHLD 竞争条件

请考虑以下fork()/SIGCHLD伪代码。

在上面的例子中有一个竞争条件。" "有可能/* child stuff */在 " " 开始之前完成,/* parent stuff */这可能导致孩子的 pid 在退出后被添加到孩子列表中,并且永远不会被删除。当应用程序关闭时,父母将无休止地等待已经完成的孩子完成。

我能想到的一种解决方案是有两个列表:started_childrenfinished_children. 我会添加到started_children我现在添加到的同一个地方children。但是在信号处理程序中,不是从children我删除,而是添加finished_children. 当应用程序关闭时,父母可以简单地等到started_children和之间的差异finished_children为零。

我能想到的另一个可能的解决方案是使用共享内存,例如共享父母的孩子列表并让孩子.add.remove他们自己?但我对这方面了解不多。

编辑:另一个可能的解决方案,这是我首先想到的,就是sleep(1)在开头添加一个,/* child stuff */但这对我来说很有趣,这就是我忽略它的原因。我什至不确定这是 100% 修复。

那么,您将如何纠正这种竞争条件?如果有一个完善的推荐模式,请告诉我!

谢谢。

0 投票
2 回答
206 浏览

linux - 程序分叉时如何清除输出缓冲区?

我有一个写入 FILE *cgiOut 的程序,在它写入流之后,我需要分叉并运行一个后台进程。问题是,在 fork 之后,FILE * 流似乎有时会被刷新,并且我得到重复的输出(在 fork 之后,所有打开的文件都被关闭,我猜这会导致缓冲区被刷新)。我怎样才能避免这种情况?我不想关闭主进程中的文件,因为它是在库中打开的,我认为它是一个套接字或管道。

0 投票
3 回答
314 浏览

multithreading - 启动和停止分叉进程

父进程是否可以在 Unix 中启动和停止子(分叉)进程?

我想实现一个任务调度程序(见这里),它能够同时运行多个进程,我认为这需要单独的进程或线程。

如何停止子进程的执行并在给定时间后恢复它?

(如果这只能通过线程实现,那么线程是如何实现的?)

0 投票
1 回答
59495 浏览

c++ - 当父进程被杀死时,使用 fork() 创建的子进程是否会自动被杀死?

我正在用fork()C/C++ 创建子进程。
当父进程结束(或由于某种原因被杀死)时,我希望所有子进程也被杀死。
是系统自动完成的吗?还是我必须自己做?


预先存在的类似问题:

0 投票
3 回答
902 浏览

c - 分析多进程程序

我想分析一个分叉和产生几个子进程的程序。我想看看在某些功能上花费了多少时间。什么分析器可以处理这项工作?

0 投票
2 回答
5723 浏览

linux - C 中的管道损坏——pipe()、fork()、exec() 程序

我需要编写一个简单的程序:将有一个 Parent 和一些程序 [children](通过execlParent 开始)。孩子们以这种方式相互交流:孩子我感知到父母编号 J,父母向 J 发送消息(类似于 - “有消息给你”),J 发送给父母编号 K 等等。

还有一个问题——我的程序(通过strace命令测试)试图向孩子发送一条消息,然后出现了损坏的管道错误。

如果有人查看代码并告诉我出了什么问题,我将不胜感激:

这是代码: