+/**
+ * Message shared by processes. Contains array of process IDs
+ */
+struct message {
+ pid_t pids[3];
+};
+
+struct message * processes = NULL;
+
+
+/**
+ * Handler for signals.
+ */
+void sig_handler(int signo)
+{
+ fprintf(stderr, "[%s] Received %s!\n", "process3", strsignal(signo));
+ if (signo == SIGUSR1) {
+ }
+ else if (signo == SIGTERM) {
+ int i = 0;
+ fprintf(stderr, "[%s] > Releasing resources\n", "process3");
+ close(read_descriptor);
+ for (; i < 3; i++) {
+ fprintf(stderr, "[%s] Process %d, PID: %d\n", "process3", i, processes->pids[i]);
+ }
+ exit(0);
+ }
+ else if (signo == SIGTSTP) {
+ fprintf(stderr, "[%s] > Closing pipe\n", "process3");
+ close(read_descriptor);
+ raise (SIGSTOP);
+ }
+ else if (signo == SIGCONT) {
+ fprintf(stderr, "[%s] > Opening pipe\n", "process3");
+ read_descriptor = open(read_pipe, O_RDONLY);
+ }
+}
+
+/**
+ * Program grabs data (calculated number of characters) from process2 and prints
+ * grabbed data to the standard output.
+ */
+int main(void) {
+ /** Buffer used for storing data from input pipe */