Fork und vorhandene Threads?

Lesezeit: 1 Minute

Benutzer-Avatar
Mac13

Betrachtet der untergeordnete Prozess auf einem Linux-System die vorhandenen Threads genauso wie der übergeordnete Prozess?

int main() {

  //create thread 1

  int child_pid = fork();

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

Da der gesamte Adressraum für den untergeordneten Prozess kopiert wird, was passiert mit dem Status der Threads. Was ist, wenn der Thread 1 im obigen Segment auf ein bedingtes Signal wartet? Befindet es sich auch im untergeordneten Prozess im Wartezustand?

Benutzer-Avatar
Nr

Threads unter Linux versuchen heutzutage, POSIX-kompatibel zu bleiben. Nur der aufrufende Thread wird repliziert, keine anderen Threads (beachten Sie, dass Sie z. B. unter Solaris auswählen können, was Fork tut, je nachdem, zu welcher Bibliothek Sie verlinken)

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

Ein Prozess soll mit einem einzigen Thread erstellt werden. Wenn ein Multithread-Prozess aufruft fork(), muss der neue Prozess eine Kopie des aufrufenden Threads und seines gesamten Adressraums enthalten, möglicherweise einschließlich der Zustände von Mutexe und anderen Ressourcen. Folglich darf der Tochterprozess zur Vermeidung von Fehlern nur asynchronsignalsichere Operationen bis zu einem der folgenden Zeitpunkte ausführen exec Funktionen aufgerufen werden. Fork-Handler können mittels des eingerichtet werden pthread_atfork() Funktion, um Anwendungsinvarianten übergreifend beizubehalten fork() Anrufe.

Die POSIX 2018-Spezifikation von fork() ist ähnlich.

  • Vielen Dank. Der Link ist eine große Hilfe.

    – Mac13

    2. Juli 2009 um 23:39 Uhr

Benutzer-Avatar
dlowe

Threads werden nicht von einem untergeordneten Prozess auf einem Linux-System mit fork() geerbt. Eine ausführliche Quelle ist hier: http://linas.org/linux/threads-faq.html

  • Diese FAQ ist sehr veraltet. Der größte für den Benutzer sichtbare Unterschied besteht darin, dass LinuxThreads seit Kernel 2.6 und glibc 2.3 durch NPTL veraltet ist, was alle offenen Probleme mit nicht-POSIX-ähnlichem Threading-Verhalten löst.

    – vergänglich

    2. Juli 2009 um 18:20 Uhr

1054060cookie-checkFork und vorhandene Threads?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy