0

通过搜索几乎找不到关于调用 main 的内容 - 所以我猜这个问题基本上是“关闭”的。

建议的问题提供了这个C# 问题“从另一个类调用 Main()”,答案是你没有,使用 Main() 下的子函数并调用它;所以我的假设是同样的答案也适用于 fork()。

void somefunction ()
{    
    pid_t  pid; 
    pid = fork();

    if (pid == 0) {

        char *p;
        char *argv[] = { (char*)spawn_count, (char*)gradiant, (char*)i, (char*)(i+spread), p };
        main(5, **argv);
    }
    else if (pid == -1)
       cout << "ERROR: can't fork" << endl;

    else ; //PID == 1,
}

这在 g++ 中编译"error: 'main' was not declared in this scope"

问题:

  • 范围如何main(argc, argv)?我可以在 Windows中使用LPTSTR.
  • 之后fork(),要启动孩子main(),这是怎么做的?
  • 之后fork(),在 main 中调用 child 的同一函数中的 child 在哪里?
4

2 回答 2

1

为什么要调用main?你能不能只分叉主要的东西,如下所示:

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

    if(pid < 0 )
    {
        // Error some issue forking
    }
    if (pid == 0) {
        // Child related processing here
    }
    else {
        // parent related processing here
    }
}

Fork 返回两次,一次为父级,一次为子级,并且在进行 fork 系统调用的同一点。

你可以参考这个链接阅读更多:http ://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

于 2013-03-20T13:45:18.797 回答
-1

对于落入与我相同的陷阱的任何人 - Linux 和 Windows 并行处理的工作方式非常不同。

  • 在 Windows 中,您再次调用程序并通过 main() 传递参数
  • 在 Linux 中,您调用 fork() 然后从程序中调用您想要的任何函数,就像使用任何其他函数一样。与您通过 fork windows 所经历的“废话”相比,这种方法非常简单。

在了解了这个区别后,我立即从笔记本电脑中删除了 windows 并安装了 Linux :)

于 2013-05-16T19:25:11.610 回答