【问题标题】:How to run a function in background?如何在后台运行函数?
【发布时间】:2015-10-29 04:02:50
【问题描述】:

我想在后台运行一个 C 函数,但我希望它在 main 函数退出时保持运行。

我尝试了以下操作:

  1. pthread_detach,如果main 函数调用exit() 而不是pthread_exit,则分离线程退出。
  2. deamon():它在后台运行代码,而不是并行运行。

那么,即使在我的 main 函数退出后,在并行/后台运行 C 函数的最简单方法是什么?

【问题讨论】:

  • 我的理解是当你的main()方法退出时,你的程序就会终止。因此,您可能必须在 main() 方法中有一个循环,等待线程完成执行。
  • 我不会用线程来解决这个问题,相反,你应该链接另一个任务。请问这里的“在后台”具体是什么意思?
  • fork 应该为你做。
  • 你可以使用fork创建一个守护进程,然后退出主运行bg中的守护进程。这应该可以解决问题。
  • 是的,我要的是分叉和妖魔化,谢谢。

标签: c linux multithreading parallel-processing pthreads


【解决方案1】:

那么,即使在我的 main 函数退出后,在并行/后台运行 C 函数的最简单方法是什么?

调用pthread_exit()退出main()

【讨论】:

  • 那么通过调用这个main会立即退出吗?还是会等到 [other] 线程终止然后退出?
  • @aisbaa:在多线程环境中,main() 只是另一个线程,将照此处理。所以从它调用pthread_exit() 会结束这个线程,是的。
  • 这种行为是在 POSIX 中指定的还是特定于 Linux 的?
  • @g-v:我看不出有什么原因,为什么这可能是 Linux 特有的。
  • 谢谢。我没有争论任何事情,我只是想知道这个功能是否由 POSIX 规范(显式或隐式)保证。似乎它,因为POSIX明确声明pthread_exit()永远不会释放进程范围的资源,所以它不能调用_exit()并且只有在调用_exit()时才会终止该进程,收到信号,或所有正在运行的线程退出。
【解决方案2】:

一旦 main 返回,操作系统将删除进程中的所有线程。要继续线程,请使用 fork 创建子进程。

【讨论】:

  • 谢谢,我会试一试,听起来应该可以解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2020-08-29
  • 2019-08-29
  • 2011-06-30
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多