🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.os.linux
Article #80

fork/exec frage (programming)

#80
From: Herbert Rosmanith
Date: Sat, 25 Nov 1995 00:00
45 lines
2699 bytes
hi,

hab da ein kleines problem.
ich moechte den output eines programmes an "less" umleiten.
das ist ja kein problem, einfach "prog | less".
nun moechte ich aber nicht dauernd "prog | less" eintippen.
ich hole mir daher die variable "PAGER" und stopfe mit
fork/pipe/dup/exec den output meines programmes in
"PAGER".

funktionieren tut das so, dass ich nach main() abfrage, ob
PAGER==NULL und wenn ja, fuehre ich das eigentliche programm
aus. wenn nicht, forke() ich und fuehre das prog. noch mal
aus, diesmal mit PAGER=NULL, und zwar mit exec() im child
process. im parent process allerdings mache ich jetzt
ein exec() auf PAGER. das funktioniert auch soweit wirklich.

ich habe nur ein problem:
wenn der output meines programmes wirklich *recht* lange wird,
und ich "PAGER" beende, *bevor* das gefork()te child fertig ist,
dann erbt init dieses child.
es ist aber voellig nutzlos, dass das passiert. mir waere lieber,
wenn das child auch terminiert, wenn der parent terminiert.
dummerweise kann ich aber dem child kein signal() mehr schicken,
weil ich ja schon ein exec() auf PAGER gemacht und keine
kontrolle mehr ueber den ablauf habe.

gibt es eine (einfache) moeglichkeit, dass der child terminert,
anstatt vom init geerbt zu werden ?

(ich koennte mir hoechstens vorstellen, die programmlogik zu
aendern, also kein exec(PAGER) zu machen, sondern zu fork()en
und damit noch immer die kontrolle zu behalten. aber dann haette
ich drei prozesse statt zwei. gefaellt mir nicht....)

/herp
--
-------------------------------------------------------------
Microsoft Network is prohibited from redistributing this work in any
form, in whole or in part. Copyright, Herbert Rosmanith, 1995. 
License to distribute this post is available to Microsoft for US$1,000,
or equivalent local currency. Posting without permission constitutes
an agreement to these terms. Please send notices of violation to
herp@wildsau.idv.uni-linz.ac.at, and Postmaster@microsoft.com
Technical Details
Message-ID: <497vq8$e8v@alijku06.edvz.uni-linz.ac.at>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII-7-bit
X-Google-Thread: 10e2b3,82de76ef8e49d740,start
X-Google-Attributes: gid10e2b3,public
X-Google-Thread: 13f44d,82de76ef8e49d740,start
X-Google-Attributes: gid13f44d,public
X-Google-Thread: 1101c9,82de76ef8e49d740,start
X-Google-Attributes: gid1101c9,public
X-Google-Thread: 109314,82de76ef8e49d740,start
X-Google-Attributes: gid109314,public
From: herp@wildsau.idv.uni-linz.ac.at (Herbert Rosmanith)
Subject: fork/exec frage (programming)
Date: 1995/11/25
Message-ID: <497vq8$e8v@alijku06.edvz.uni-linz.ac.at>
X-Deja-AN: 120086955
organization: Johannes Kepler University Linz
newsgroups: de.comp.os.linux,at.linux,at.fido.linux,unilinz.linux