Veröffentlicht 12. Oktober 200915 j 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.
14. Oktober 200915 j 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.