/** Number of processes to spawn */
#define PROCESS_NUMBER 3
+/**
+ * Processes to spawn (programs to be execl'ed)
+ */
char * processes[PROCESS_NUMBER] = {
"process1",
"process2",
* 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++) {
/* 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
"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