我可以将不同的任务分配给C中进程的fork()
的不同实例吗?
例如:
program.c
已分叉3次
int main()
{
pid_t pid;
pid = fork();
pid = fork();
pid = fork();
}
现在fork()
的每个实例我想做不同的事情,我可以这样做吗?用叉子?或任何其他方法,如果有利? :)
PS:我正在测试实时Linux,并希望通过时间约束来检查上下文切换的性能。
答案 0 :(得分:1)
您可以使用posix进程..
posix_spawn(& Pid,ProgramPath.c_str(),& FileActions,& SpawnAttr,argv,envp);
查看其文档here。
答案 1 :(得分:0)
你总是必须测试fork(2)的结果(特别是处理错误情况),并为0结果(在子进程中成功)执行不同的操作,结果为正(在父进程中成功),否定结果(失败,所以使用perror
)。所以根据这个结果你可以做不同的事情。通常,您最终会为子进程调用execve(2)(当fork
给出0时),并且您通常会设置内容(例如IPC至pipe(7) - s)在调用fork
之前。
所以在fork
之后根据fork
的结果执行不同的代码来分配不同的任务
您应阅读Advanced Linux Programming 。它有几个章节解释所有这些(所以我不会花时间在这里解释它。)
您可能对pthreads感兴趣(使用clone(2)和futex(7)实现,除非您正在实现您的线程库,否则不应该直接使用它,这是不合理的。)
还要尝试strace(1)几个程序(包括一些shell和一些基本命令)。它会告诉他们正在调用哪个syscalls(2)。另请参阅intro(2)。