process scheduling order is generally unpredictable
Here is a program to demonstrate that operating systems' process schedulers are
somewhat whimsical. Given a set of processes a scheduler will run them in some order.
Given the same set again, it may, typically, run them in a different order. (It
all depends on the scheduler's algorithm. Different schedulers have different
algorithms.) For
experimentation we have a "multifork.c" source file that can spawn a
set of processes.
You could do this exercise on 1) the remote server, 2) your own local linux machine, or 3) a linux virtual machine I may have distributed to you (probably easiest).
To get the file:
1) on the remote server: it is in the /home/public directory. Log in to the server and get a copy of it into your home directory by
cp /home/public/multifork.c ~
2) on a local linux machine: pull a copy of it from the remote server onto your local machine and work there instead by
scp public@<server's name>:multifork.c . (don't overlook the dot; you will have to give the password given in class for the server's user account named "public")
3) on a virtual machine: it may be located in in /home/public. Log in to the VM and and get a copy of it into your home directory by
cp /home/public/multifork.c ~
Once you have it you can compile it
gcc multifork.c -o multifork
Read the explanatory comment block at the top of the source file first.
head multifork.c [note: the "head" command shows the first 10 lines of a text file, containing the comment of interest in this case ]
Then run multifork as described there. Suitable commands for you to supply as an argument to it might be /bin/echo, with multiple text token arguments for echo processes to print, or /bin/ls, with multiple (existing) file names for ls processes to list. Supply five or six arguments. Suitable invocations might be these two:
./multifork /bin/echo one
two three four five
[note: the dot-slash in front of the "multifork" command directs the
shell to look for the multifork executable in the current directory]
launches the following five as separate processes:
/bin/echo one [which prints "one"]
/bin/echo two [which prints "two"]
/bin/echo three [which prints "three"]
/bin/echo four [which prints "four"]
/bin/echo five [which prints "five"]
./mutifork /bin/date +%A
+%B +%Y +%d
launches the following four as separate processes:
/bin/date +%A [which prints current day-of-the-week]
/bin/date +%B [which prints current month-of-the-year]
/bin/date +%Y [which prints current year]
/bin/date +%d [which prints current date-of-the-month]
The scheduling order is at the discretion and whim of the particular job scheduler that runs on your platform. A scheduler might run a largely identical set of processes in one order the first time, and a different order the next. That's what this program shows on the platforms I have tried. Can I necessarily rely on it work same way (varying order) on your unix system?
Homework instructions:
If this exercise is assigned as homework, please run one of the above two
invocations of multifork at least three times and study the output. Produce a
screenshot showing your several invocations and their results, three or more of
them on the screen. Name the screenshot file "multifork.jpg (or
.png)"and upload it.