不同的任务分配给C中一个过程的FORK()的不同实例

时间:2014-04-21 11:33:27

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

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

program.c已分叉3次

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用posix进程..

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

查看其文档here

答案 1 :(得分:0)

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

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

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

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

还要尝试strace(1)几个程序(包括一些shell和一些基本命令)。它会告诉他们正在调用哪个syscalls(2)。另请参阅intro(2)