Se eu tiver um programa em execução com threads e chamar fork()
um sistema baseado em unix, as threads serão copiadas? Eu sei que a memória virtual para o processo atual é copiada 1: 1 para o novo processo gerado. Eu sei que os threads têm sua própria pilha na memória virtual de um processo. Assim, pelo menos a pilha de threads também deve ser copiada. No entanto, não sei se há algo mais nos threads que não reside na memória virtual e, portanto, NÃO é copiado. Se não houver, os dois processos compartilham os encadeamentos ou são cópias independentes?
From The Open Group Base de Especificações Edição 7, 2018 Edition garfo :
fonte
Originalmente, o "fork" era obtido gravando a tarefa no disco e, em vez de ler em um thread diferente (o que seria feito se a tarefa fosse trocada por outra diferente), modificando o ID da tarefa da imagem ainda na memória e continuando com sua execução (como a nova tarefa). Essa foi uma modificação muito simples do mecanismo básico de troca de tarefas, em que apenas uma tarefa ocuparia memória RAM de cada vez.
Obviamente, à medida que o gerenciamento de memória ficou mais elaborado, esse esquema foi modificado para se adequar ao novo ambiente.
fonte