Practicing with fork, exec, wait.
The goal is for you to practice using the unix process API, i.e., 'fork()', 'exec()', 'wait()', and 'exit()'. Some questions do not require a direct answer. All questions ask you to write a program. To write the programs, you will simply adapt the examples shown in Chapter 5. The actual source code for Chapter 5 is provided in the book's companion website (http://pages.cs.wisc.edu/~remzi/OSTEP/).
- Write a program that calls
fork(). Before callingfork(), have the main process access a variable (e.g., x) and set its value to something (e.g., 100). What value is the variable in the child process? What happens to the variable when both the child and parent change the value of x?
// Add your code or answer here. You can also add screenshots showing your program's execution. - Write a program that opens a file (with the
open()system call) and then callsfork()to create a new process. Can both the child and parent access the file descriptor returned byopen()? What happens when they are writing to the file concurrently, i.e., at the same time?
// Add your code or answer here. You can also add screenshots showing your program's execution. - Write another program using
fork().The child process should print “hello”; the parent process should print “goodbye”. You should try to ensure that the child process always prints first; can you do this without callingwait()in the parent?
// Add your code or answer here. You can also add screenshots showing your program's execution. - Write a program that calls
fork()and then calls some form ofexec()to run the program/bin/ls. See if you can try all of the variants ofexec(), including (on Linux)execl(),execle(),execlp(),execv(),execvp(), andexecvpe(). Why do you think there are so many variants of the same basic call?
// Add your code or answer here. You can also add screenshots showing your program's execution. - Now write a program that uses
wait()to wait for the child process to finish in the parent. What doeswait()return? What happens if you usewait()in the child?
// Add your code or answer here. You can also add screenshots showing your program's execution. - Write a slight modification of the previous program, this time using
waitpid()instead ofwait(). When wouldwaitpid()be useful?
// Add your code or answer here. You can also add screenshots showing your program's execution. - Write a program that creates a child process, and then in the child closes standard output (
STDOUT FILENO). What happens if the child callsprintf()to print some output after closing the descriptor?
// Add your code or answer here. You can also add screenshots showing your program's execution.