CSCI 415/515 - Fall 2023
Systems Programming
Processes and Pipes


Monday, Oct 9, 2023

Readings
The Linux Programming Interface:
  • Ch 24: Process Creation
    • 24.1: Process Creation
    • 24.2: Creating a New Process: fork()
    • 24.4: Race Conditions After fork()
    • 24.5: Avoiding Race Conditions by Synchronizing with Signals
  • Ch 25: Process Termination
    • 25.1: Terminating a Process: _exit() and exit()
    • 25.2: Details of Process Termination
    • 25.3: Exit Handlers
    • 25.4: Interations Between fork(), stdio Buffers, and _exit()
Materials

Wednesday, Oct 12, 2023

Readings
The Linux Programming Interface:
  • Ch 26: Monitoring Child Processes
    • 26.1: Waiting on a Child Process
    • 26.2: Orphans and Zombies
    • 26.3: The SIGCHLD Signal
  • Ch 27: Program Execution
    • 27.1: Executing a New Program: execve()
    • 27.2: The exec() Library Functions
    • 27.4: File Descriptors and exec()
    • 27.5: Signals and exec()
    • 27.6: Executing a Shell Command: system()
    • 27.7: Implementing system()
Materials

Monday, Oct 16, 2023

Readings
The Linux Programming Interface:
  • Ch 44: Pipes and FIFOs
    • 44.1: Overview
    • 44.2: Creating and Using Pipes
    • 44.3: Pipes as a Method of Process Synchronization
    • 44.4: Using Pipes to Connect Filters
    • 44.5: Talking to a Shell Command via a Pipe: popen()
    • 44.6: Pipes and stdio Buffering
Materials

Wednesday, Oct 18, 2023

Readings
The Linux Programming Interface:
  • Ch 28: Process Creation and Program Execution in More Detail
    • 28.4: Effect of exec() and fork() on Process Attributes
  • Ch 6: Processes
    • 6.7: Environment List