从fork()调用main(argc,argv)

时间:2013-03-20 13:28:05

标签: c++ g++ fork argv

通过搜索调用main主要没有找到任何东西 - 所以我猜这个问题基本上是'关闭'。

建议的问题提供了这个C# question "Calling Main() from another class"答案,你没有,在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)范围如何?我可以使用LPTSTR跟踪process in windows
  • fork()之后,要从main()启动孩子,这是怎么做到的?
  • fork()之后,孩子在哪里,在main中调用child的同一个函数?

2 个答案:

答案 0 :(得分:1)

你为什么要打电话给主? 你能不能只用下面的主要内容:

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

答案 1 :(得分:-1)

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

  • 在Windows中,您再次调用程序并通过main()
  • 传递参​​数
  • 在Linux中,你调用fork()然后在程序中调用你想要的任何函数,就像使用任何其他函数一样。与你通过分叉窗口的'废话'相比,这种方法非常简单。

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