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 what they're exactly 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.
6 Answers
Control+Z is used for suspending a process by sending it the signal SIGTSTP, 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 yesHowever, 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:
fgWith a program suspended will bring it back to the foreground.
And running the command
bgWith 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 %1If you have multiple suspended commands, running
jobswill list them, like this:
[1]- Stopped pianobar
[2]+ Stopped yesUsing %#, 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.
Ctrl+Z suspends the process with SIGTSTP, you can resume it later. 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. There's also a SIGSTOP which can be sent by kill() and which the process can't intercept. SIGCONT is the counterpart to both SIGSTOP and SIGTSTP that un-suspends the process.
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 %1if you have multiple processes paused then you should do
jobsto see the output and select the appropriate number to resume e.g.
fg %3resumes the third job in the list. You can also have jobs running in the background with
bg %nwhere n is the job number.
1Cntrl + Z pause the currently running process. And
Cntrl + C simply terminates the running process.Using Cntrl + C you can not resume the process. where as using Cntrl + Z you can resume the process.
use fg %1 to resume the process.
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 prompt:
fg %1
If you have multiple processes paused then you should do
jobs
to see the output.
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.