fork 和现有线程?

发布于 2024-07-26 04:14:33 字数 274 浏览 7 评论 0原文

在Linux系统上,子进程查看现有线程的方式与父进程相同吗?

int main() {

  //create thread 1

  int child_pid = fork();

  if ( 0 == child_pid)
  {
       ..
  }
  else
  {
       ..
  }

由于子进程复制了整个地址空间,因此线程的状态会发生什么变化。 如果上面段中的线程 1 正在等待条件信号怎么办? 子进程也处于等待状态吗?

On a linux system, does the child process view the existing threads the same way as the parent process ?

int main() {

  //create thread 1

  int child_pid = fork();

  if ( 0 == child_pid)
  {
       ..
  }
  else
  {
       ..
  }

Since the whole address space is copied for the child process, what happens to the state of the threads. What if the thread 1 in the above segment is waiting on a conditional signal. Is it in the waiting state in child process as well ?

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

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

发布评论

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

评论(2

流星番茄 2024-08-02 04:14:33

如今,Linux 上的线程试图保持 POSIX 兼容。 仅复制调用线程,而不复制其他线程(请注意,例如在 Solaris 上,您可以根据链接到的库选择 fork 的功能)

来自 http://www.opengroup.org/onlinepubs/000095399/functions/fork.html (POSIX 2004):

应创建一个进程
单线程。 如果是多线程
进程调用fork(),新进程
应包含调用的副本
线程及其整个地址空间,
可能包括以下州
互斥体和其他资源。
因此,为了避免错误,
子进程只能执行
异步信号安全操作直到
例如 exec 函数之一
叫做。 叉
处理程序可以通过以下方式建立
pthread_atfork() 函数的
为了维持申请
fork() 调用之间的不变量。

fork() 的 POSIX 2018 规范很相似。

Threads on Linux nowadays try to stay POSIX compliant. Only the calling thread is replicated, not other threads (note that e.g. on Solaris you can choose what fork does depending on what library you link to)

From http://www.opengroup.org/onlinepubs/000095399/functions/fork.html (POSIX 2004):

A process shall be created with a
single thread. If a multi-threaded
process calls fork(), the new process
shall contain a replica of the calling
thread and its entire address space,
possibly including the states of
mutexes and other resources.
Consequently, to avoid errors, the
child process may only execute
async-signal-safe operations until
such time as one of the exec functions
is called. Fork
handlers may be established by means
of the pthread_atfork() function in
order to maintain application
invariants across fork() calls.

The POSIX 2018 specification of fork() is similar.

你怎么敢 2024-08-02 04:14:33

线程不是使用 fork() 从 Linux 系统上的子进程继承的。 深入的来源在这里:http://linas.org/linux/threads-faq。 html

Threads are not inherited from a child process on a linux system using fork(). An in-depth source is here: http://linas.org/linux/threads-faq.html

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