C 中的多进程

问题描述 投票:0回答:1

我是C语言的新手。我最近遇到了用 fork() 函数在 C 中进行多重处理,该函数是在单个主 C 程序中编写的。

我想知道是否可以有多个主C程序并通过引用第二个主C程序中的parent_id来使用多进程概念。

提前致谢。

c multiprocessing fork
1个回答
0
投票

fork
系统调用在被调用时会生成一个子进程。您可能会认为它是对您的流程进行完美克隆,其所有状态都是分叉时原始状态的完美副本。从调用
fork
开始,每个进程(父进程和子进程)将继续自行执行。

操作系统通常不会真正复制进程的内存映像,而只是假装它们是独立的,只要它们只读取它们的内存映像,它们的内存映像就在两个实例之间共享。一旦其中一个进程写入,操作系统就会制作该内存的副本,以便每个进程都有自己独立于另一个进程的副本,它可以安全地修改,而不会中断另一个进程并弄乱其内存。

您可以在程序中的任何时刻调用

fork
,无论是在
main
的开头,还是中间的某个位置,甚至在其他函数中。当你调用它的那一刻,进程就会分裂并分开,每个进程都会从你调用
fork
的地方独立执行。

还有一种方法可以通过检查

fork
的返回值来确定
fork
之后的代码当前是作为子进程还是原始父进程执行:如果您位于父进程中,则
fork
返回一个正整数,应该是在 fork 启动的另一个子进程的 PID(进程标识符)。但如果您位于该子进程中,则
fork
的返回值为 0。因此,如果您的代码从
fork
调用中得到 0,则意味着您是孩子。

当然,您可以根据需要启动任意多个子进程,而不仅仅是一个。您可以创建一个循环,并在循环的每一轮中调用

fork
,并在某个数组中记下其返回值(新子进程的PID),以跟踪所有子进程(对于每次调用,
fork
将返回不同的 PID 值)。

YouTube 上有 Jacob Sober 制作的关于在 C 中分叉进程的精彩视频教程,您可能想查看它以获取更多说明和代码示例。

© www.soinside.com 2019 - 2024. All rights reserved.