🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #170

Re: Neuen Prozess starten und weiterlaufen?

#170
From: J Wunsch
Date: Thu, 14 Dec 1995 23:47
48 lines
2154 bytes
Frank Kopp <kopp> writes:
            ^^^^  (Dein Newsreader hat hier ein Problem)

> >- Starte zweiten Prozess
> 
> int starte_extern(char* command)
> {
> 
> pid_t old_pid = getpid();
> fork();
> 
> // der kopiert den ersten Prozess. Jetzt hat man zwei Prozesse die das
> // selbe tun, allerdings haben sie unterschieliche PIDs
> // Deshalb kommt jetzt eine Abfrage:
> 
> if ( old_pid != getpid() )

Normalerweise benutzt man den Rückkehrwert von fork(), und testet ihn
vorsichtshalber auch noch gegen -1 ("Cannot fork").

> {
>    //ersetze diesen Prozess mit externen Programm durch:
>    execl ( "/bin/sh/", "sh", command, 0);
>    exit(1);	// Zur Sicherheit, wird normalerweise nicht erreicht.

Wird in jedem richtigen System immer erreicht.

"/bin/sh/" verweist (dank des trailing slash) auf ein Verzeichnis.
Die Bourne-Shell ist meist keins. :-)

[...]
>        ret = waitpid(-1, &status, WNOHANG); // hier wird geprueft, ob der 2.
> // Prozess noch laeuft.
>        XmUpdateDisplay(display);
>    }
>    status = WEXITSTATUS(status);  // Dies ist der returncode des 2. Prozesses

WEXITSTATUS() ist nur gültig, wenn WIFEXITED(status) != FALSE ist.

(Im anderen Fall ist hoffentlich WIFSIGNALED(status) != FALSE, und Du
kannst die Ursache des Todes Deines Kindes mittels WTERMSIG()
ermitteln.)

-- 
cheers, J"org

joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Technical Details
Message-ID: <4aqd1t$rbt@uriah.heep.sax.de>
Path: arc1-ca.pugleaf.net!uriah.heep!news
References: <4ajrja$9mr@sparcserver.lrz-muenchen.de> <4an0ei$ekh@sparcserver.lrz-muenchen.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!uriah.heep!news
From: j@uriah.heep.sax.de (J Wunsch)
Newsgroups: de.comp.lang.c++,de.comp.lang.c,de.comp.os.unix
Subject: Re: Neuen Prozess starten und weiterlaufen?
Followup-To: de.comp.os.unix
Date: 14 Dec 1995 23:47:09 GMT
Organization: Private BSD site, Dresden
Message-ID: <4aqd1t$rbt@uriah.heep.sax.de>
References: <4ajrja$9mr@sparcserver.lrz-muenchen.de> <4an0ei$ekh@sparcserver.lrz-muenchen.de>
Reply-To: joerg_wunsch@uriah.heep.sax.de (Joerg Wunsch)
NNTP-Posting-Host: localhost.heep.sax.de
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Newsreader: knews 0.9.3