Hahne Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 Hallo, ich sitze gerade an einen kleinen C Programm (und das auch noch als .NET Programmierer ) indem ich einen Prozess mit fork() splitte. In meinen Childprozess führe ich einen einfachen exec() aus. In meinem Parentprozess warte ich mit der Funktion waitpid() auf meinen Childprozess. Gibt es eine Möglichkeit dem Warten einen Timeout zu geben. Also z.B. dass ich meinem Childprozess nur 60 Sekunden Zeit gebe. Sollte der Childprozess dann immer noch nicht beendet sein dann soll er diesen abbrechen. Zitieren
Hahne Geschrieben 14. Oktober 2009 Autor Geschrieben 14. Oktober 2009 Hallo ihr, hab es jetzt doch noch lösen können mein Problem. Und zwar folgendermaßen: pid_t pid = 0; int status, err = 0; switch((pid = fork())) { case -1: /* error */ fprintf(stderr, "Error\n"); break; case 0: /* child */ err = execl (hier der exec ...); if (err == -1) exit(1); break; default: /* parent */ signal(SIGCHLD, sighandler); if (sleep(20) == 0) { printf("Fehler! Timeout...\n"); kill(pid, SIGTERM); } waitpid(pid, &status, 0); break; } Ich habe zuerst mit fork() ganz normal einen Prozess gesplittet in ein Parent udn Childprocess. Im Childprocess führe ich meine ganz normale exec-Funktion aus. Im Parentprocess setze ich ein Signalhandler mit SIGCHLD und setze mein Parentprocess auf sleep(). Wenn der Childprocess fertig ist beendet er den sleep und gibt die Anzahl der noch verbleibenden Sekunden zurück. Sollte der Timer abgelaufen sein gibt er eine Fehlermeldung aus und killt den Childprocess. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.