I'm using Mac OS X Terminal. And I use
Ctrl+C to stop some programs. But I realized that I don't know exactly what they're doing. What are they and what's the difference between them?
Control+Z is used for suspending a process by sending it the signal
If you suspend a process, this will show up in the shell to tell you it has been suspended:
However, if you kill one, you won't see any confirmation other than being dropped back to a shell prompt. When you suspend a process, you can do fancy things with it, too. For instance, running this:
With a program suspended will bring it back to the foreground.
And running the command
With a program suspended will allow it to run in the background (the program's output will still go to the TTY, though).
If you want to kill a suspended program, you don't have to bring it back with
If you have multiple suspended commands, running
will list them, like this:
Ctrl+Z suspends the process with SIGSTOP, you can resume it later. The process can't intercept the signal. Ctrl+C kills the process with SIGINT, which terminates the process unless it is handled/ignored by the target, so you can't resume it.
CTRL+Z stops (pauses) a job
CTRL+C terminates a job
with CTRL+C you cannot resume the process but with CTRL+Z the job can be resumed by just entering at the command promt:
if you have multiple processes paused then you should do
to see the output and select the appropriate number to resume e.g.
resumes the third job in the list. You can also have jobs running in the background with
where n is the job number.
The previous answers are correct, but for some unknown reason Ctrl-Z suspends all child processes as well, but killall -SIGSTOP ... only suspends the frontmost (parent) process and leaves the children to run as they like.