fork 和现有线程?
在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如今,Linux 上的线程试图保持 POSIX 兼容。 仅复制调用线程,而不复制其他线程(请注意,例如在 Solaris 上,您可以根据链接到的库选择 fork 的功能)
来自 http://www.opengroup.org/onlinepubs/000095399/functions/fork.html (POSIX 2004):
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):
The POSIX 2018 specification of
fork()
is similar.线程不是使用 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