【问题标题】:DIFFERENT TASKS ASSIGNED TO DIFFERENT INSTANCES OF FORK() OF A PROCESS IN C分配给 C 中进程的不同 fork() 实例的不同任务
【发布时间】:2014-04-21 11:33:26
【问题描述】:

我可以将不同的任务分配给 C 中进程的 fork() 的不同实例吗? 比如:

program.c 被分叉了 3 次

int main()
{
    pid_t pid;
    pid = fork();
    pid = fork();
    pid = fork();
}

现在对于fork() 的每个实例,我想做不同的事情,我可以这样做吗?用叉子?或任何其他有利的方法? :)

PS:我正在测试实时 Linux,并想通过时间约束检查通过分叉的上下文切换的性能。

【问题讨论】:

  • fork() 和 exec() 一起工作很棒!
  • 阅读fork 的手册页,它解释了如何判断您是在父进程中还是在子进程返回后,您可以使用if (pid == ...) 来“做一些不同的事情” ,无论是调用不同的函数,还是exec-ing 不同的程序或其他什么...
  • 我想我知道一个进程是否是父进程,当它是一个子进程时,问题就解决了,我不必那样使用 fork,1 个 fork 和许多 exec 可以提供帮助出来。我想检查的是 RTOS 在处理 fork 进程时的性能。对于我发现的简短回答,不,不能将不同的任务分配给 fork 进程,您需要以不同的方式对其进行编程。 :) .
  • 不要全部大写,例如在标题中。这被认为是大喊大叫。

标签: linux process fork real-time context-switch


【解决方案1】:

你可以使用posix进程..

posix_spawn(&Pid,ProgramPath.c_str(), & FileActions,& SpawnAttr,argv,envp);

查看其文档here

【讨论】:

    【解决方案2】:

    总是必须测试fork(2) 的结果(特别是处理错误情况),并为 0 结果(在子进程中成功)、肯定结果(在子进程中成功)做不同的事情父进程),否定结果(失败,所以使用perror)。所以根据这个结果,你可以做不同的事情。通常你最终会为子进程调用execve(2)(当fork给出0时),你通常会设置一些东西(例如IPCpipe(7)-s)在调用@987654334之前 @。

    所以在fork之后分配不同的任务只需根据fork的结果执行不同的代码

    您应该阅读Advanced Linux Programming。它有几章解释所有这些(所以我不会花时间在这里解释)。

    您可能对pthreads 感兴趣(使用clone(2)futex(7) 实现,除非您正在实现线程库,否则您不应该直接使用它,这是不合理的)。

    也尝试strace(1) 几个程序(包括一些shell 和一些基本命令)。它会告诉他们正在呼叫哪个syscalls(2)。另见intro(2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多