linux-l: execl+pthreads in einem Programm

Jan-Benedict Glaw jbglaw at lug-owl.de
Mo Nov 27 13:37:44 CET 2000


On Mon, Nov 27, 2000 at 12:39:28PM +0100, Stefan Bund wrote:
> Jan-Benedict Glaw <jbglaw at lug-owl.de> writes:
> > On Mon, Nov 27, 2000 at 09:49:22AM +0100, Stefan Bund wrote:
> > > Aber der ge-exec'te Prozess (das ist der eigentliche CORBA-Server,
> > > siehe den parallelen thread mit dem Subject: fork() problem mit
> > > omniorb). bleibt einfach hängen :-(
> > > 
> > > Sogar wenn ich statt fork()/exec() probeweise system() verwende
> > > klappt's nicht: Das Programm wird gestartet, bleibt dann aber
> > > hängen. Nur wenn ich das Programm direkt von der Shell aus aufrufe,
> > > funktioniert das.
> 
> > Aus einem nicht-gethreadetem Programm heraus einen fork()
> > zu machen, um direkt danach (im child) einen exec() mit dem 
> > gethreadeten Programm zu machen, ist sicher. Wenn das nicht klappt,
> > dann vermute ich eher einen bug in Deiner daemonize()-Funktion...
> 
> Klaro, das geht ja eigentlich auch, aber ich starte das gethreadete
> Programm ja aus einem anderen gethreadeten Programm (direkt oder

..was kein Problem sein sollte, wenn die beiden Programme nichts
weiter gemeinsam haben, als ihre Verwandtschaftsbeziehung.

Innerhalb des gethreadeten Vater-Prozesses solltest Du problemlos
folgendes machen dürfen:

[...]
	switch(newpid=fork()) {
		case -1: {
			/* Oerks. Da is was schiefgegangen */
			exit(EXIT_FAILURE);
			break;
		}
		case 0: {
			/* Kind-Prozeß */
			/* Hier darf *nichts* anderes mehr gemacht */
			/* werden, als der exec()-Cal. Insbesondere */
			/* dürfen keine Variablen, die thread-safe sind */
			*/ mehr angefaßt werden! */
			exec(...);
			break; /* never reached */
		}
		default: {
			/* Im Eltern-Prozeß ist nix mehr zu machen */
			break;
		}
	}
[...]

...das sollte laufen. Vielleicht solltest Du direkt vor die switch
Anweisung einen längeren sleep() oder eine pause() machen, und dann
mal in der Zwischenzeit unter /proc/<PID>/fd/* gucken, ob 
stdin stdout stderr noch sinnvoll sind...

MFG, JBG

-- 
Fehler eingestehen, Größe zeigen: Nehmt die Rechtschreibreform zurück!!!
/* Jan-Benedict Glaw <jbglaw at lug-owl.de> -- +49-177-5601720 */
keyID=0x8399E1BB fingerprint=250D 3BCF 7127 0D8C A444 A961 1DBD 5E75 8399 E1BB
     "insmod vi.o and there we go..." (Alexander Viro on linux-kernel)
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 240 bytes
Beschreibung: nicht verfügbar
URL         : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20001127/2d9d1e79/attachment.sig>


Mehr Informationen über die Mailingliste linux-l