I'm using Mac OS X Terminal. And I use Ctrl+Z or 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?

This question was a Super User Question of the Week.
Read the March 13, 2011 blog entry for more details or submit your own Question of the Week.

link|improve this question

68% accept rate
feedback

3 Answers

up vote 45 down vote accepted

Control+Z is used for suspending a process by sending it the signal SIGSTOP, which cannot be intercepted by the program. While Control+C is used to kill a process with the signal SIGINT, and can be intercepted by a program so it can clean its self up before exiting, or not exit at all.

If you suspend a process, this will show up in the shell to tell you it has been suspended:

[1]+  Stopped                 yes

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:

fg

With a program suspended will bring it back to the foreground.

And running the command

bg

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 fg first, you can simply do the command:

kill %1

If you have multiple suspended commands, running

jobs

will list them, like this:

[1]-  Stopped                 pianobar
[2]+  Stopped                 yes

Using %#, where # is the job number (the one in square brackets from the jobs output) with bg, fg, or kill, can be used to do the action on that job.

link|improve this answer
I learned something new here (the bg/fg commands). Thanks! – Adrian Petrescu Mar 27 '11 at 3:45
You can change which keys do which job by using the stty command. For example stty susp ^Z or stty intr ^C. – RedGrittyBrick Mar 27 '11 at 12:08
Actually, it sends SIGTSTP, which can be intercepted. – Simon Richter Mar 28 '11 at 7:28
I feel a blog post coming up! – Ivo Flipse Mar 31 '11 at 12:38
feedback

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.

link|improve this answer
feedback

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:

fg %1

if you have multiple processes paused then you should do

jobs

to see the output and select the appropriate number to resume e.g.

fg %3

resumes the third job in the list. You can also have jobs running in the background with

bg %n

where n is the job number.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.