Bird
Raised Fist0
Operating Systemsknowledge~5 mins

Process creation (fork and exec) in Operating Systems - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does the fork() system call do in process creation?

The fork() system call creates a new process by duplicating the calling process. The new process is called the child process, and it is almost an exact copy of the parent process.

Click to reveal answer
beginner
What is the purpose of the exec() family of functions?

The exec() functions replace the current process's memory and code with a new program. This means the process starts running a different program without creating a new process.

Click to reveal answer
intermediate
How do fork() and exec() work together in creating a new process?

First, fork() creates a copy of the current process. Then, the child process uses exec() to replace its code with a new program. This way, a new process runs a different program.

Click to reveal answer
intermediate
What is the difference between the parent and child process after a fork() call?

After fork(), both processes run independently. The parent gets the child's process ID as the return value, while the child gets zero. They have separate memory spaces but start as copies.

Click to reveal answer
advanced
Why is fork() considered a cheap operation in modern operating systems?

Because modern OS use 'copy-on-write', which means the actual copying of memory happens only if either process changes it. This saves time and memory when creating new processes.

Click to reveal answer
What does the fork() system call return to the child process?
A-1
BChild's process ID
CParent's process ID
D0
Which system call replaces the current process's program with a new one?
Aexec()
Bexit()
Cwait()
Dfork()
What happens if fork() fails?
AReturns -1
BReturns child's PID
CReturns 0
DCreates a zombie process
Why do operating systems use copy-on-write with fork()?
ATo speed up process termination
BTo share memory permanently
CTo avoid copying memory until necessary
DTo prevent process creation
Which of these is true about the child process after fork()?
AIt immediately runs a different program
BIt runs the same program as the parent initially
CIt shares the same memory space as the parent
DIt cannot execute <code>exec()</code>
Explain how fork() and exec() work together to create a new process running a different program.
Think about copying first, then replacing the program.
You got /4 concepts.
    Describe what happens in the system when fork() is called and why copy-on-write is important.
    Focus on memory handling after fork.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the fork() system call do in an operating system?
      easy
      A. Replaces the current process with a new program
      B. Creates a new process by copying the current process
      C. Terminates the current process immediately
      D. Pauses the current process temporarily

      Solution

      1. Step 1: Understand the role of fork()

        The fork() call creates a new process by duplicating the current one, including its code and data.
      2. Step 2: Differentiate from exec()

        Unlike exec(), which replaces the process, fork() makes a copy, so both processes continue running.
      3. Final Answer:

        Creates a new process by copying the current process -> Option B
      4. Quick Check:

        fork() = process copy [OK]
      Hint: Remember: fork copies, exec replaces [OK]
      Common Mistakes:
      • Confusing fork() with exec()
      • Thinking fork() replaces the process
      • Believing fork() pauses the process
      2. Which of the following is the correct way to use exec() in a program?
      easy
      A. exec("ls -l")
      B. exec("/bin/ls", "-l")
      C. exec("/bin/ls", ["ls", "-l"])
      D. exec("ls", "-l")

      Solution

      1. Step 1: Recall exec() syntax

        The exec() family requires the program path and an argument list, where the first argument is the program name.
      2. Step 2: Identify correct argument format

        exec("/bin/ls", ["ls", "-l"]) correctly passes the path and an array with the program name and its argument.
      3. Final Answer:

        exec("/bin/ls", ["ls", "-l"]) -> Option C
      4. Quick Check:

        exec() needs path + argument list [OK]
      Hint: exec() needs program path and argument array [OK]
      Common Mistakes:
      • Passing arguments as separate strings instead of array
      • Using command line string instead of path
      • Omitting the program name in argument list
      3. Consider this code snippet in a Unix-like system:
      pid = fork()
      if pid == 0:
          exec("/bin/echo", ["echo", "Hello"])
      else:
          print("Parent process")

      What will be printed when this code runs?
      medium
      A. Parent process Hello
      B. Parent process
      C. Hello
      D. Hello Parent process

      Solution

      1. Step 1: Understand fork() behavior

        The fork() creates a child process. The child runs the exec() replacing itself with the echo program.
      2. Step 2: Analyze output from parent and child

        The parent (pid > 0) prints "Parent process". The child (pid == 0) calls exec(), loading /bin/echo which prints "Hello". Both outputs appear on stdout, typically with parent first.
      3. Final Answer:

        Parent process Hello -> Option A
      4. Quick Check:

        fork() + child exec() = both print [OK]
      Hint: fork() child exec(): both print, parent first [OK]
      Common Mistakes:
      • Thinking only parent prints
      • Reversing the output order
      • Believing exec() prevents child output
      4. What is wrong with this code snippet?
      pid = fork()
      if pid == 0:
          exec("ls", ["ls", "-l"])
      else:
          print("Parent")
      medium
      A. The exec call is missing the full path to the program
      B. fork() should be replaced with exec()
      C. The parent process should call exec() instead
      D. The argument list to exec() should be a string, not a list

      Solution

      1. Step 1: Check exec() usage

        The exec() call requires the full path to the executable, not just the command name.
      2. Step 2: Identify the missing full path

        Using "ls" without "/bin/ls" will cause exec to fail because it won't find the program.
      3. Final Answer:

        The exec call is missing the full path to the program -> Option A
      4. Quick Check:

        exec() needs full path [OK]
      Hint: Always use full path in exec() [OK]
      Common Mistakes:
      • Using command name without path in exec()
      • Confusing fork() and exec() roles
      • Passing wrong argument types to exec()
      5. A program wants to run another program safely without stopping itself. Which sequence of system calls should it use?
      hard
      A. Call exec() first, then fork()
      B. Call exec() directly to run the new program
      C. Call fork() twice, then the parent calls exec()
      D. Call fork() to create a child, then the child calls exec()

      Solution

      1. Step 1: Understand process creation and replacement

        Calling exec() replaces the current process, so calling it directly stops the original program.
      2. Step 2: Use fork() then exec() in child

        By calling fork(), the program creates a child process. The child can then call exec() to run the new program, leaving the parent running.
      3. Final Answer:

        Call fork() to create a child, then the child calls exec() -> Option D
      4. Quick Check:

        fork() then exec() = safe new program run [OK]
      Hint: fork first, then exec in child to keep parent alive [OK]
      Common Mistakes:
      • Calling exec() directly and losing original process
      • Calling fork() twice unnecessarily
      • Calling exec() before fork()