c - backgrounding使用 string ( )的线程应用程序

  显示原文与译文双语对照的内容
0 0

所以我有一个使用线程的应用程序。 当程序首先启动时,我希望它能够设置数据库连接以及它的他任何开启程序的错误。

我做了一些查找,找到了一些说'不混合fork和线程'的资源,而另一些则说,linux只复制主线程。
对于后一个( 它只是复制主线程),线程如何访问文件级别( 全局) 变量? 线程是否不能访问进程空间分支地址中现在的变量?

最终的目标是在创建线程之后,让应用程序后台本身。 如果不可以能的话,我可以以在线程创建之前将它的放置在线程创建之前。

注意:在fork的时候,线程将执行 sleep() 循环,直到主线程将数据放入共享变量处理。 所以如果睡眠中断他们就不会被伤害。

时间:原作者:3个回答

0 0

无法将线程重复为 fork的一部分,父出口的线程将在父出口时终止,因这里无法帮助你。 你需要在分叉后创建线程,或者者将 pthread_atfork 用于在子进程中重新创建它们的register 处理程序。 我建议只等到分叉后才能创建你的线程,因为它更简单更有效。

为什么要尽可能长的时间延迟分叉? 在初始化完成之前,如果要保持到终端或者某个终端的连接,那么只有父进程完成初始化后才能完成初始化并准备就绪。 可以使用各种同步工具来完成这里任务。 一个简单的方法是打开一个管道,它的中子级将输出发送回父节点;。

原作者:
0 0

分叉一个进程将创建两个不同的进程和线程,在一个进程中不能访问第二个。 如果你希望不同的进程访问相同的内存,你需要共享内存。

原作者:
0 0

进程中的线程调用 fork() 时,通过复制创建进程的完整地址空间,并将调用 fork的( 一个) 线程复制到新进程。 如果进程中存在其他线程,则不会复制它们。 这几乎会在你的程序中导致 Bug 。 因此建议不要混合线程和叉。

如果要创建具有多个线程的后台进程,则在生成任何其他线程之前必须先对它的进行 fork 。 然后,这两个进程正常运行,就像任何两个独立进程一样: 进程内的线程共享相同的内存,但是后台线程和前台进程将不会共享任何内存( 默认情况) 。

原作者:
...