When using a terminal emulator, one can stop the currently running program with either CTRL-Z or CTRL-S. What's the difference between these control characters?
It's the difference between the "stop" and "suspend" actions to the terminal.
Stopping the output with Ctrl-S doesn't stop the process from running; rather it just stops output to the terminal (resume with Ctrl-Q / "start").
Suspending a process with Ctrl-Z actually stops it running, and puts the process into a different state visible from ps (state "T"). Resume with "fg" or "bg" to resume the process in the foreground or background, respectively.