C fork和现有线程?
在linux系统上,子进程是否以与父进程相同的方式查看现有线程C fork和现有线程?,c,multithreading,unix,fork,C,Multithreading,Unix,Fork,在linux系统上,子进程是否以与父进程相同的方式查看现有线程 int main() { //create thread 1 int child_pid = fork(); if ( 0 == child_pid) { .. } else { .. } 由于为子进程复制了整个地址空间,线程的状态会发生什么变化。如果上述段中的线程1正在等待条件信号,该怎么办。它在子进程中也处于等待状态吗?线程不是使用fork()从linux系统上
int main() {
//create thread 1
int child_pid = fork();
if ( 0 == child_pid)
{
..
}
else
{
..
}
由于为子进程复制了整个地址空间,线程的状态会发生什么变化。如果上述段中的线程1正在等待条件信号,该怎么办。它在子进程中也处于等待状态吗?线程不是使用fork()从linux系统上的子进程继承的。这里有一个深入的来源:现在Linux上的线程试图保持POSIX兼容。仅复制调用线程,而不复制其他线程(请注意,例如,在Solaris上,您可以根据链接到的库选择fork的功能) 自2004年起(POSIX): 应创建一个具有 单线程。如果是多线程 进程调用新进程
fork()
应包含呼叫的副本
线程及其整个地址空间,
可能包括美国
互斥体和其他资源。
因此,为了避免错误
子进程只能执行
异步信号安全操作,直到
例如exec
函数之一的时间
被称为。叉
可以通过以下方式建立处理程序:
中的pthread\u atfork()函数的
维持申请的命令
跨越fork()
调用的不变量
POSIX 2018的规范与之类似。该常见问题解答已非常过时。用户可以看到的最大区别是,自内核2.6和glibc 2.3以来,LinuxThreads已经被NPTL淘汰,它解决了非POSIX类线程行为的所有未决问题。谢谢。这个链接很有帮助。