respawn code?

T

tom

Grünschnabel
hallo.
ich arbeite gerade an einem kleinen "kiosk-host"! also mp3player und surfstation.
der user bekommt beim booten alle programme zur verfügung gestellt und sollte sich eines - aus welchem grund auch immer - beenden soll es sofort wieder gestartet werden.

ich hab das mal ganz "quick & dirty" in perl geschrieben:
#########################################
#!/usr/bin/perl -w

$epid1 = "unset";
$xpid1 = "unset";

while (1) {
sleep 1; #perl is too fast...so we wait one sec
chomp ($epid = `pidof xclock`);
chomp ($xpid = `pidof xterm`);

print " 1 epid $epid epid1 $epid1 \n\n";
print " 1 Xpid $epid Xpid1 $epid1 \n\n";



until ($epid eq $epid1) {
system("xclock &");
sleep 1; #perl is too fast...so we wait one sec
chomp ($epid = `pidof xclock`);
chomp ($epid1 = `pidof xclock`);
print "epid $epid epid1 $epid1 \n\n";
}


until ($xpid eq $xpid1) {
system("xterm &");
sleep 1; #perl is too fast for system forks...so we wait one sec
chomp ($xpid = `pidof xterm`);
chomp ($xpid1 = `pidof xterm`);
print "Xpid $xpid Xpid1 $xpid1 \n\n";
}
}
#################################################

wie die meisten wahrscheinlich sehen is das mit einer while[1] schleife alles andere als die feine englische.

nun zu meiner frage.
es sollte doch möglich sein das ganze in C zu realisieren mit semaphore und messagequeues. also das ich irgendein SIG abfange und darauf reagiere.

leider sind meine C und auch C++ versuche schon sehr lange her und ich weiß nicht so recht wo ich anfangen soll.

kann mich vielleicht jemand in die richtige richtung schupsen oder mir einen link zu vergleichbaren dinge (doku, etc) geben?
oder hat einfach nur jemand einen tipp für mich. vielleicht intressierts ja jemand und findet verwendung für sowas. es würde mir natürlich auch freude machen an sowas mit mehr leuten zu "fummeln" :).

lg
tom
 
aja ich hätts fast vergessen.
natürlich soll sich nur das programm neustarten das sich beendet hat/wurde.
 
naja ums polling kommste kaum drum herum, ausser du veränderst den ursprünglichen source der anderen programme. der kernel schottet prozesse untereinander ab, könntest höchstens per ipc miteinander kommunizieren lassen, aber da muss halt dann bereits in dem source der programme was vorliegen. andere möglichkeit wäre du schreibst nen programm dass kind prozesse für die einzelnen programme anlegt und beim abschuss diese neu erstellt, aber is nicht ganz ohne.
denke mal das polling wäre da eine recht einfache und bequeme lösung und dürfte auch nicht soviel rechenzeit fordern.
 
danke für die antwort!

ähm, ich weiß nicht genau was polling ist?
nennt man die lösung durch die endlosschleife polling?
 
Polling: Du fragst nach bestimmten Zeitabständen, ob der Prozess noch lebt.
Poll ist auch ne Abstimmung und Polling ist so ne Art Rumfragerei.
 
he danke für die erklärung des pollings.
hätte ich mein hirn selbst eingeschaltet wär wahrscheinlich selbst draufkommen.

@hangloose: danke für den link. der is suppa. bringt schon ein bissl einblick wie ich bei dem ganze vorgehen könnte. danke vielmals
 
Nachtrag zu Polling:
Polling ist auch das was die aufdringlichen Kellner immer machen:
"Schmeckt es?"
"Passt alles?"
"Haben Sie noch Wünsche?"
 

Ähnliche Themen

[Perl] Perl OO Methodenaufruf in anderem Objekt

verzeichniss suche funktioniert nicht

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Zurück
Oben