fork 3 个子进程,每个进程运行单独的进程

发布于 2024-11-19 10:07:47 字数 152 浏览 3 评论 0原文

我见过的大多数例子都只打印“我是一个患有PID的孩子”。我正在尝试分叉 3 个子进程,每个子进程运行 3 个不同的进程。每个子程序都是独立的 C 程序。因此,我需要在 fork() 之后使用 exec() 调用它们,但我的问题在于语法以及如何引用每个子进程,因为所有子进程的 pid =0。

Most of the examples I have seen only Print "I am a child with PID" . I am trying to fork 3 children, each child running 3 different processes. each of the children are separate C programs. Hence, I need to call them using exec() after fork() but my problem is in the syntax and how to reference each child because all child processes have pid =0.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

jJeQQOZ5 2024-11-26 10:07:47

使用 getmypid() 获取子进程中的 pid。 fork 调用在子进程中返回 0:

for($i = 0; $i < 3; $i++) {
   $pid = pcntl_fork();
   if ($pid == -1) {
        die("Fork failed on loop #$i");
   } else if ($pid == 0) {
        $mypid = getmypid(); // executes in the children
        exec(... whatever this child has to run ...);
   } else {
        ... executes in the parent
   }
}

请注意,这在 PHP 中是这样,但基本机制在几乎所有执行 fork() 的语言中都保持相同。


followup:

...
} else if ($pid == 0) {
    $mypid = getmypid();
    switch ($i) {
         case 0:
             exec(... app #1 ...)
         case 1:
             exec(... app #2 ...)
         case 2:
             exec(... app #3 ...)
    }
} ...

这是您启动 3 个应用程序的方式。当父脚本调用 fork() 时,每个子进程都会得到不同的 $i,因此您可以通过 $i 的值确定您属于哪个子进程。

Use getmypid() to get the pids in the children. The fork call returns 0 in the child processes:

for($i = 0; $i < 3; $i++) {
   $pid = pcntl_fork();
   if ($pid == -1) {
        die("Fork failed on loop #$i");
   } else if ($pid == 0) {
        $mypid = getmypid(); // executes in the children
        exec(... whatever this child has to run ...);
   } else {
        ... executes in the parent
   }
}

Note that this in PHP, but the basic mechanics remain the same in pretty much any language that does fork().


followup:

...
} else if ($pid == 0) {
    $mypid = getmypid();
    switch ($i) {
         case 0:
             exec(... app #1 ...)
         case 1:
             exec(... app #2 ...)
         case 2:
             exec(... app #3 ...)
    }
} ...

Is how you'd start up your 3 apps. At the moment the parent script calls fork(), each child will end up with a different $i, so you can determine which child you're in by the value of $i.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文