Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Sometimes, processes ignore the SIGINT signal sent by Ctrl-C in Bash. For instance, man and vi. Assuming you don't want to google or read the manual on how to exit the running process, is there any key sequence that will always work (without leaving the terminal)?

share|improve this question

6 Answers 6

up vote 65 down vote accepted

Send the SIGQUIT signal with Ctrl+\.

.. $ sleep 10
^\Quit

→ This is equivalent to kill -3 pid. Programs run in user-space don't ignore sigquit.

There is also a set of Magic SysRq keyboard shortcuts. One of the more interesting ones is this: Alt+SysRq+k. It kills every process on the current virtual console. If one of your ttys is completely and utterly broken, this can be used to go back. On the tty running X.org, it can be used to kill X without mercy.

The SysRq key is, on most keyboards, the same as the Print Key. On my notebook, it can be invoked using the Fn key; I.e. Alt→Fn→Print→k in that order.

Here are some of the basic process management shortcuts:

  • Ctrl+Z: pause a process (plus bg to resume in the background, fg to raise to foreground )
  • Ctrl+C: politely ask the process to shut down now
  • Ctrl+\: mercilessly kill the process that is currently in the foreground
  • Alt+SysRq+s: Write data to disk (always do this before killing anything important)
  • Alt+SysRq+s, k: mercilessly kill all current processes on a given virtual console
  • Alt+SysRq+s, b: mercilessly reboot without unmounting,
  • Alt+SysRq+r, e, i, s, u, b: Safely reboot even if the system is utterly broken,

Note: Ctrl+Z, in contrast to Ctrl+C and Ctrl+\, also works for man, vi, less, and the like.

When in doubt, the follwing procedure will almost always work:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^Z of course indicates that Ctrl+Z has been pressed.


For a more in-depth look at Shells and Terminals, also see my answers on:



A mistake in this answer kindly corrected by Juliano.

share|improve this answer
3  
Works for "sleep 10" but still doesn't work for "man" or "vi". Obviously "kill -9 pid" does work at killing both processes. Am I missing something? –  Olivier Lalonde Nov 20 '10 at 12:14
2  
Ctrl+Z works with things like less, man, vi and so on. You can then kill them by doing a ps to see their process id and kill them using kill pid or, if you don't care about other instances of the program, killall vi. In any case, Ctrl-Z always seems to work. –  Stefano Palazzo Nov 20 '10 at 12:33
4  
You can also do kill %% to kill the last job and kill %5 where 5 is the job number shown in jobs. –  Olivier Lalonde Nov 20 '10 at 13:43
2  
Ctrl-\ sends a SIGQUIT, not a SIGKILL. There are some important differences between SIGQUIT and SIGKILL. en.wikipedia.org/wiki/SIGQUIT –  Juliano Nov 20 '10 at 16:44
1  
There is no limitation that programs run in userspace have to honour SIGQUIT. C-\ does not "mercilessly kill the process that is currently in the foreground" any more than C-c does, both are trappable. –  Chris Down Mar 6 '13 at 8:11

Sometimes the CTRL+C is getting sent to the wrong program or input channel. This is especially common with editors such as vi, with commands with piped output, complex bash commands involving loops, etc.

A simple, quick solution is to suspend the job CTRL+Z and then kill it by job number: kill %1 or kill -9 %1, etc.

share|improve this answer

You can try Ctrl+\

share|improve this answer
1  
Doesn't work with either man or vi. –  Hippo Nov 20 '10 at 18:41

To quit from man, use q To leave vi use :q

share|improve this answer
  • Try one of these:

    Ctrl+4

    Ctrl+\


  • Or:

    Ctrl+Z and then run:

    kill %1

Where %1 is the number of job which was returned when you pressed Control-Z


  • When you're in text console, you could even press: Ctrl+SysRq

    It should kill the process.

share|improve this answer

Try Ctrl+Alt+Backspace

If you are using ubuntu 10.04 you wanna enable this key to work.

To enable Control-Alt-Backspace

Goto System-->Preferences-->Keyboard

Select the Layouts tab and click on the Layout Options.

Select Key sequence to kill the X server and enable Control + Alt + Backspace.

Note:

Pressing Ctrl-Alt-Backspace will restart your X server.

share|improve this answer
    
Edited the question to make it clear I want to kill the process from within the terminal. –  Olivier Lalonde Nov 20 '10 at 12:04

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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