X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fbootstrap.c;h=070dac8f88ad96961ddcd2187c9b0e937543f9c5;hb=HEAD;hp=1df77c16c8852aef5f11adee20876e234725a52a;hpb=8c1fe1f8edbdb17e876546e623bc65e7205c7335;p=wsti_so.git diff --git a/src/bootstrap.c b/src/bootstrap.c index 1df77c1..070dac8 100644 --- a/src/bootstrap.c +++ b/src/bootstrap.c @@ -10,6 +10,9 @@ /** Number of processes to spawn */ #define PROCESS_NUMBER 3 +/** + * Processes to spawn (programs to be execl'ed) + */ char * processes[PROCESS_NUMBER] = { "process1", "process2", @@ -20,9 +23,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 +41,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 +59,15 @@ 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)); + } + sleep(1); } /* All processes should be now spawned. Close bootstrap program. */ - + return 0; } \ No newline at end of file