PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Systembefehl mit Timeout ausführen?


Gast
2008-11-24, 23:03:07
Ich möchte von C aus einen Shellbefehl ausführen mittels system() bzw. popen()(unter Linux). Allerdings soll diese Ausführung mit einem Timeout versehen sein, was so direkt nicht geht. Hat jemand eine Ahnung wie man das machen könnte? Bei google finde ich wenig dazu, außer dass es vielleicht mit fork() irgendwie gehen könnte. Danke für eure Hilfe!

Superguppy
2008-11-24, 23:35:39
Ich würde mit fork() einen Kindprozess abspalten und den Befehl dort ausführen. Auf den Kindbefehl kannst du eine bestimmte Zeit warten und ihn dann abschießen, falls er noch nicht fertig ist.

Gast
2008-11-26, 02:25:59
Ok, Soweit ich jetzt rausgefunden habe kann ich mit "WNOHANG" als Option von waitpid ein entsprechendes Timing einbauen. Aber wie geht das mit dem Abschießen genau? Es muss ja schließlich auch der Shellbefehl abgebrochen werden und nicht nur der Kindprozess selbst...das nachfolgende Beispiel killt zwar den Kindprozess, der Shellbefehl läuft aber weiter :(
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>

int main (void) {
pid_t pid;
int i;
switch (pid = fork ()) {
case -1:
break;
case 0:
system("sleep 1000");
exit(0);
default:
for(i = 0; i < 5; ++i){
if (waitpid (pid, NULL, WNOHANG) != 0) {
return 0;
}
printf("waiting\n");
fflush(stdout);
sleep(1);
}
kill(pid, SIGTERM);
printf("killing\n");
fflush(stdout);
return 0;
}
return 0;
}

robobimbo
2008-11-26, 08:34:23
imho ist das deswegen so, weil system ja selbst einen neuen prozess aufruft

wenn du das so machen willst, dann ruf deinen shell-befehl mittels exec(...) auf - das ersetzt den kindprozess und ruft keinen neuen auf