call main(argc, argv) from fork()
call main(argc, argv) from fork()
通过搜索几乎没有发现调用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"
问题:
-
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:)
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- execlp() 在 fork() 之后无法正常工作
- std::async from std::async in windows xp
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- from std::vector to adept::avector
- 为什么if(fork()==0){getpid()}和popen()进程返回相同的进程id
- While循环在fork和execvp调用后没有继续
- qt get child (Callout) from QChart
- fork(),在C中共享内存和指针
- Webassembly from Javascript
- call main(argc, argv) from fork()