[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ssh und maximale Laufzeit definieren


Am 17.10.2008 schrieb Markus Hochholdinger:
> Jetzt frage ich mich (google wusste (noch) keine Antwort) ob es ein Programm in 
> der Form wie z.B. time oder nice gibt, welchem man eine maximale Laufzeit fuer 
> ein auszufuehrendes Programm mitgeben kann. Wunschvorstellung waere:
>   maxruntime -n 120 ssh .. .. ..

Das laesst sich doch mit ein paar kleinen Zeilen C schnell loesen. Als
kleine Hausaufgabe kannst du ja dieses Codefragment vervollstaendigen:

=========== 8< 8< 8< ============

#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>

pid_t child;

void sighandler (int sig) {
    switch (sig) {
        case SIGALRM:
            printf("ELTERN: Alarm timeout.\n");
            kill (child, SIGKILL);
    }
}

int main () {
    pid_t test;
    int stat, timeout = 1;

    // Hausaufgabe: Commandline verstehen...

    child = fork();
    if (child > 0) {
        // Elternprozess
        signal(SIGALRM, sighandler);    // Signalhandler registrieren
        alarm(timeout);
        printf ("ELTERN: Ja, mein Kind?\n");
        test = wait(&stat);
        printf("ELTERN: Das Kind starb und gab %d zurueck\n", stat);
        return 0;

    } else if (child == 0) {
        // Kindprozess
        // Hausaufgabe: Irgendwas aus der Exec-Funktionsfamilie?

        // Dummycode:
        printf ("KIND: Mama!\n");
        sleep (5);
        printf ("KIND: Ende.\n");

        return 0;

    } else {
        // Fork war ein Griff ins Klo...   
        return 2;
    }

    return 0;
}

=========== >8 >8 >8 ============

Ich habe es nur kurz durch den Compiler gejagt und getestet dass es keine
Zombies erzeugt. Die globale Variable ist zwar eklig, aber ich bin zu muede
fuer eine bessere Loesung. ;-)

Bye,
Michael
--
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: http://wiki.uugrn.org/wiki/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/