Turn On/Off pids on notifying other processes.
[wsti_so.git] / src / bootstrap.c
index 1df77c16c8852aef5f11adee20876e234725a52a..070dac8f88ad96961ddcd2187c9b0e937543f9c5 100644 (file)
@@ -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