多进程的问题

发布于 2022-07-17 06:12:26 字数 228 浏览 9 评论 3

文件a,文件b分别编译成可执行文件,a里fork一个子进程,然后system("./b");调b的可执行文件。没有问题。
但是如果a,b 分别编译,并连接成一个可执行文件c,a里同样fork一个子进程,然后调用b的入口函数,比如说把b的main函数改成其他函数名做为被调用者。这样程序运行就会有问题。

编译连接都没有问题,可是运行就是会出错

一般会是什么问题呢?请各位帮忙

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

难理解 2022-07-21 22:47:35

不知到楼主是怎么写的,这样做应改不会有什么问题的,仔细看看你的代码吧。fork的时候,程序里的变量会被复制一份到子进程的,只有在线程中才需要手动维护变量的并发访问,虽然Linux下的线程就是一个进程。下面这个例子可以正常运行的:

  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. static int a = 0;
  5. int func1(void)
  6. {
  7.   while(1)
  8.   {
  9.       sleep(1);
  10.       printf("func1...........a= %dn", ++a);
  11.   }
  12. return 0;
  13. }
  14. int func2(void)
  15. {
  16.    while(1)
  17.    {
  18.      sleep(2);
  19.      printf("func2.............a = %dn",++a);
  20.    }
  21.   return 0;
  22. }
  23. int main(void)
  24. {
  25.   if(fork() == 0)
  26.    {
  27.      func1();
  28.      exit(0);
  29.    }else
  30.    {
  31.      if(fork() == 0)
  32.       {
  33.          func2();
  34.          exit(0);
  35.       }else
  36.         exit(0);
  37.    }

复制代码

倾城泪 2022-07-19 03:01:54

查查看,全局变量的定义和引用是否有问题,还有就是内存越界的可能。

鹤舞 2022-07-18 11:12:42
  1. #include <stdio.h>
  2. main()
  3. {
  4.         printf("amainn");
  5.         int f=fork();
  6.         if(!f)
  7.         {//child
  8.                 mainb();
  9.         }
  10. }
  11. mainb()
  12. {
  13.         printf("bmainn");
  14. }

复制代码

这个代码运行的很好,你的程序是这个结构吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文