#include #include #include #include #define MAX_ARGS 16 int main(int argc, char *argv[]) { for (int i = 1; i < argc; i++) { char* arg = strdup(argv[i]); char *args[MAX_ARGS]; // free args[0] = strtok(arg, " \n\t"); if (!args[0]) { //fehler: leerer command return 1; } for (int j = 1; j < MAX_ARGS; j++) { args[j] = strtok(NULL, " \n\t"); if (args[j] == NULL) break; } pid_t pid = fork(); switch (pid) { case 0: // kind execvp(args[0], args); perror("execlp"); return 1; // hier nicht weiterlaufen! case -1: // error return 1; // TODO korrekte fehlerbehandlung default: // elter { int a; wait(&a); if (WIFEXITED(a)) { fprintf(stderr, "%s exited with %i\n", argv[1], WEXITSTATUS(a)); } } } } }