在linux系统上,子进程查看现有线程的方式与父进程相同吗?
int main() {
//create thread 1
int child_pid = fork();
if ( 0 == child_pid)
{
..
}
else
{
..
}
由于子进程复制了整个地址空间,因此线程的状态会发生什么变化。如果上面段中的线程 1 正在等待条件信号怎么办?子进程也处于等待状态吗?
如今,Linux 上的线程试图保持 POSIX 兼容。仅复制调用线程,而不复制其他线程(请注意,例如在 Solaris 上,您可以根据链接到的库选择 fork 的功能)
From http://www.opengroup.org/onlinepubs/000095399/functions/fork.html http://www.opengroup.org/onlinepubs/000095399/functions/fork.html(POSIX 2004):
应创建一个流程
单线程。如果是多线程
处理调用fork()
,新流程
应包含调用的副本
线程及其整个地址空间,
可能包括以下州
互斥体和其他资源。
因此,为了避免错误,
子进程只能执行
异步信号安全操作直到
这样的时间之一exec
功能
叫做。叉
处理程序可以通过以下方式建立
的pthread_atfork()
函数于
为了维持申请
跨领域的不变量fork()
calls.
POSIX 2018 规范fork() http://pubs.opengroup.org/onlinepubs/9699919799/functions/fork.html很相似。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)