MihaelMattes Blatt6(a+b)
A
Systemnahe Software (II)
im Sommersemester 2009
Abgabetermin:10.Juni2009
DiesistdieGesamtversiondesBlatts6,bestehendausTeilaundb.
tinysh
Die folgenden Aufgaben befassensihweiter mitdertinysh.Zum Bearbeiten der Aufgaben
empehltessih,nihtdieeigenebearbeiteteVersiondertinyshzuverwenden,sondernsihin
dieBeispiellösungdesletztenAufgabenblattseinzuarbeiten.
22 Verbesserter Parser (5 Punkte)
Bisherkonnte dietinyshnurdannEingabeumlenkungdurhführen,wennkein Trennzeihen
zwishen den Umlenkungspfeilenstanden. ErweiternSie den Parser der tinysh so,dass die
UmlenkungauhmitTrennzeihenzwishendemDateinamenunddemUmlenkungspfeilfunk-
tioniert.
EinBeispielfürdiealteVarianteist
% /bin/eho Hallo >datei
Nunsollauhdiesfunktionieren:
% /bin/eho Hallo > datei
23 Jobkontrolle (Extrapunkte)
Hinweis:DieseAufgabeistfreiwilligundwirdgesondertbewertet.Shiken SieIhreLösung
direktperE-MailandenÜbungsleiter.DieshönsteLösungwirdindenÜbungenvorgestellt
werden.
DietinyshbesitztbisherkeineJobkontrolleesistalsonihtmöglih,indertinysheinen
demeinige DateneinesgestartetenProzesses verwaltetwerden.Hier müsstenzumindestdie
PIDdesKindprozessesundeineJobnummerverwaltetwerden.
AuÿerdemmüssenSieBuiltinszurJobkontrolleshreibenundauhdieMöglihkeitshaen,
Jobs mit& imHintergrundzu starten. Hinweise liefertauh diebash-Manpage unter dem
StihwortJOBCONTROL.
Signale
Beahten SiebeimUmgangmitSignalbehandlernimmerdieHinweiseimSkriptabSeite 63
(Zur Speiherklassevolatile) undverwendenSienuralsvolatiledeklarierteVariablen,
lokaleVariablensowieAsyn-Signal-Safe-Funktionenwiesignal(),abort()und_Exit().
24 Signale senden und auswerten (7 + 3 Punkte)
ShreibenSieeinProgrammsigsend.,welheseinenKindprozesserzeugt,kurzwartetund
danaherstdasSignalSIGHUPunddanndasSignalSIGINTandenKindprozesssendet.
DerKindprozesssollfürbeide SignaleeinenSignalhandler einrihtenunddanahaufein
Signalwarten(sieheManpagepause(2)).SIGHUPsollignoriertwerdenundderKindprozess
sollsihbeimErhaltvonSIGINTbeenden.
Wenndiesfunktioniert,erweiternSiedasProgrammso,dassderErzeugerprozessermittelt,
welhesSignalzurBeendigungdesKindesgeführthat.FallsderKindprozessnihtdurhein
Signalbeendetwurde,sollstattdessenderExitstatusdesKindsausgegebenwerden.
25 Signalbehandlung (6 + 4 + 5 Punkte)
ErweiternSiedasProgrammausdervorherigenAufgabeso,dassderKindprozessdieSignal-
nummerdesjeweilsempfangenenSignalsausgibt.BeahtenSiedabeidieHinweiseweiteroben.
DerElternprozesssollnunzusätzlihnohdasSignalSIGQUITsendenkönnen(unddasKind
diesesabfangen).
WennSiediesgeshathaben,sollderKindprozessauhnohdasSignalSIGTERMab-
fangenkönnen,dessenSignalnummerausgebenunddanahterminieren.
ZumShlusssolltenSieIhremTutorerklärenkönnen,warumdieEinrihtungeinesSignal-
handlersfürdieSignalSIGKILLundSIGSTOPnihtfunktionierenkann.
Erweiterte Signalbehandlung mit sigation (Blatt 6b)
DadieSignalbehandlungsöglihkeitennahdemC-Standardteilweiseeingeshränktsind,gibt
esimPOSIX-StandardeineumfangreihereShnittstellezurSignalbehandlung.Diesewirdüber
den Systemaufrufsigation(2) angesteuert. Hinweis:Umsigation() nutzenzu können,
mussdasMakro__EXTENSIONS__deniertwerden.IngkannmandiesmitdemKomman-
dozeilenparameter-D__EXTENSIONS__erreihen.
ShreibenSieeinProgrammholzmihl.,welhesnuraufdasSignalSIGUSR2wartetunddem
Prozess,deresgesendethat,einSIGUSR1zurükshikt.Hinweis:Siemüssenhiersigation()
verwenden,daSiesonstnihtwissenkönnen,welherProzessdasSignalSIGUSR1vershikt
hat.
27 De Randhten (6 Punkte)
ShreibenSieeinProgrammrandfihten.,welhesüberdieUmgebungsvariableMICHLdie
PIDeinesholzmihl.-Prozesseserhältundprüft,obdiesernohlebt.HierzusolldasSignal
SIGUSR2geshiktwerdenundgeprüftwerden,obordnungsgemäÿSIGUSR1zurükgesendet
wird.VerwendenSieauhinrandfihten.denAufrufsigation().
28 VerwendungvonMakeles(3Punkte+3Extrapunkte)
ShreibenSieeinMakele,welhessowohlholzmihl.alsauhrandfihten.kompilieren
kann.DieExtrapunktegibtes,wenndasMakeleunterderAngabevonmake mihltestin
derLageist,erstholzmihl.zustartenunddanahsogarrandfihten.mitderpassenden
Umgebungsvariableausführenkann.