Milan Stephan
Fotografie & IT

Zurück zur SP1 Übersicht

listRun.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

static void die(const char *msg) {
	perror(msg);
	exit(EXIT_FAILURE);
}

int main(int argc, char *argv[]) {

	// ./listRun echo aaa bbb ccc ddd
	// soll aufrufen:
	//    echo aaa
	//    echo bbb
	//    echo ccc
	//    echo ddd

	for (int i = 2; i < argc; i++) {

		pid_t p = fork();
		if (p < 0) {
			die("fork");
		}

		if (p == 0) {
			// Kindprozess
			execlp(argv[1], argv[1], argv[i], NULL);
			die(argv[1]); // Im Kindprozess IMMER terminieren!
		}

		// Elternprozess

		// Falls wir die Prozesse nacheinander starten wollen:
		// Warten, bis der Prozess terminiert
		int status;
		waitpid(p, &status, 0);
	}

	return EXIT_SUCCESS;
}