call main(argc, argv) from fork()

call main(argc, argv) from fork()

本文关键字:fork from argv main argc call      更新时间:2023-10-16

通过搜索几乎没有发现调用main -所以我猜这个问题基本上是'off'。

建议的问题提供了这个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,
}

使用"error: 'main' was not declared in this scope"

在g++中编译

问题:

  • main(argc, argv)的范围是怎样的?我可以用LPTSTR在windows中遵循这个过程。
  • fork()之后,要从main()启动子进程,该怎么做?
  • fork()之后,在main中调用child的同一函数中,child在哪里?

为什么要调用main?你能不能像下面这样fork 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

对于那些和我一样掉进陷阱的人- Linux和Windows并行处理的工作方式非常不同。

  • 在Windows中,您再次调用程序并通过main()传递参数
  • 在Linux中,您调用fork(),然后从程序中调用您想要的任何函数,就像使用任何其他函数一样。与你在fork窗口中遇到的"垃圾"相比,这种方法超级简单。

在理解了这种区别之后,我立即从笔记本电脑上删除了windows,安装了Linux:)