From 51faabd1c82aa37c43f6521ae17c47ce62272754 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20D=C5=82ugo=C5=82=C4=99cki?= Date: Sat, 21 Jun 2014 00:14:28 +0200 Subject: [PATCH] Finishing bootstrap program. --- src/bootstrap.c | 25 ++++++++++++++++++++++--- src/process1.c | 4 +++- src/process2.c | 4 +++- src/process3.c | 2 ++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/bootstrap.c b/src/bootstrap.c index 1df77c1..c8ae5bc 100644 --- a/src/bootstrap.c +++ b/src/bootstrap.c @@ -20,9 +20,16 @@ char * processes[PROCESS_NUMBER] = { * Bootstrap program used for starting all three main processes. */ int main(void) { - + /** + * Variable storing Process ID. In our case we need only to check if + * it's equal 0, to exec new program. + */ pid_t pid; + + /** Index of the current process to spawn. */ int i = 0; + + /** Error (theoretically) returned by execl. */ int err = 0; for (; i < PROCESS_NUMBER; i++) { @@ -31,7 +38,14 @@ int main(void) { /* If it is child fork */ if (pid == 0) { - err = execl(processes[i], processes[i], NULL); + fprintf(stderr, "[%s] Forked process %d has id: %d\n", "bootstrap", i, getpid()); + + /* + * Create new session for this process, so it won't close + * after the parent process exit. + */ + setsid(); + err = execl(processes[i], NULL); /* * According to manual, this will only occur @@ -42,9 +56,14 @@ int main(void) { "bootstrap", processes[i], strerror(errno)); } } + /* There was an error when forking */ + else if (pid < 0) { + fprintf(stderr, "[%s] Something went wrong when forking %s. Error: %s\n", + "bootstrap", processes[i], strerror(errno)); + } } /* All processes should be now spawned. Close bootstrap program. */ - + return 0; } \ No newline at end of file diff --git a/src/process1.c b/src/process1.c index d0b8e19..d514b03 100644 --- a/src/process1.c +++ b/src/process1.c @@ -40,7 +40,9 @@ int main(void) { mkfifo(write_pipe, 0666); file_descriptor = open(write_pipe, O_WRONLY); - + + fprintf(stderr, "[%s] Init!\n", "process1"); + do { c = fgetc(stdin); diff --git a/src/process2.c b/src/process2.c index 4db50e0..b6dff4b 100644 --- a/src/process2.c +++ b/src/process2.c @@ -45,7 +45,9 @@ int main(void) { write_descriptor = open(write_pipe, O_WRONLY); int number_of_characters = 0; - + + fprintf(stderr, "[%s] Init!\n", "process2"); + while(1) { /* Read data from input pipe */ count = read(read_descriptor, buffer, BUFFER_STEP); diff --git a/src/process3.c b/src/process3.c index dfa30db..4568d97 100644 --- a/src/process3.c +++ b/src/process3.c @@ -23,6 +23,8 @@ int main(void) { /* Reading from process2 */ read_descriptor = open(read_pipe, O_RDONLY); + fprintf(stderr, "[%s] Init!\n", "process3"); + while(1) { /* Read data from input pipe */ count = read(read_descriptor, &buffer, sizeof(int)); -- 2.30.2