[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux-misc] pthreads & fork



On Fre, Feb 15, 2002 at 11:29:07 +0100, Christof Lauber wrote:
> eine frage an die hacker unter uns: wenn ich aus einen pthread heraus ein 
> fork() mache, dann werden meine bereits laufenden pthreads gekillt.
> geht das grundsätzlich nicht, oder is das ein bug in der libpthread?

background für die andern: ein fork erzeugt einen neuen prozess (aber
führt nicht automatisch ein programm aus) mit einer neuen prozess
umgebung (sprich speicherbereich reservation und prozess overhead
administration). threads laufen innherhalb dieses prozesses (gleicher
zugriff auf memory innerhalb mehrerer threads). wenn du innerhalb eines
threads ein fork machst, sollte das klappen.

eigentlich...

aber es gibt probleme mit der libc und anderem. solche dinge führen
unsauberkeiten in der glibc zu tage (reentrante funktionen). zudem kommt
es manchmal zu signal handlings problemen, dass der thraed ewig
__sigsuspended() und dann ein unbekanntes signal geschickt wird, wenn du
z.b. forkest.

lösung: 

in jedem thread möglichst alle signale blocken und das signal handling
mit sigwait einem einzelnen oder einer kleinen gruppe von threads
überlassen. die meisten pthread dokus sprechen davon.

oder mal mit -D__REENTRANT kompilieren. das hilft manchmal auch (wegen
der glibc workarounds)