Project created for passing Operating Systems subject in High School of Information Technology Example usages -------------- Without bootstrap program ========================= In separate terminals enter: $ ./bin/process1 $ ./bin/process2 $ ./bin/process3 After that in terminal with process1 running enter some characters followed by new line (ENTER). - Process1 displays information about data buffer and how many bytes has been sent to process2. - Process2 displays information about received bytes, prints to stderr info about number of characters in buffer, and sent this value to process3. - Process3 displays information about number of entered characters. With bootstrap program ====================== In terminal, go to the ./bin directory (where compiled programs resides). Execute: $ ./bootstrap After that there should be shown info about spawning new processess. You can now pass to the standard input of the first spawned process data, .e.g: $ echo "qwertyuiop" > /proc/(process 0 pid)/fd/3 If process creation was completed without errors, you should see following output: [process2] Fetched: 11 bytes [process2] Calculated: 10 characters. Sending... [process3] Fetched: 4 bytes [process3] Process2 send: 10 Signalling ========== After bootstrapping processes, you can send them signals. Processes registers custom handlers for following ones: - SIGUSR1 (User defined signal 1) - used for internal purposes. Signal must be sent in pair with message queue. - SIGTERM (Terminated) - additionaly to standard behaviour, this signal allows releasing aquired resources and notify other processes using SIGUSR1 to do the same. - SIGTSTP (Stopped) - additionaly to standard behaviour, this signal allows holding aquired resources (closes pipes for example), and notify other processes using SIGUSR1 to do the same. - SIGCONT (Continued) - aditionaly to standard behaviour, this signal allows resume process working by opening closed pipes, and notify other processes using SIGUSR1 to do the same.