I know there is ctrl+c, but sometimes that doesn't work. In Ubuntu desktop I can just close the terminal window and open a new one when this happens, but how would this be solved using the CLI in Ubuntu server (without restarting the box)?
migrated from serverfault.com Nov 30 '11 at 21:27
This question came from our site for system and network administrators.
CTRL+C will send
You can use CTRL+\ which will send
You can suspend the process and return to shell with CTRL+Z, this will stop the execution of the process and return to the shell prompt. The process will be in memory and it will be available as a job in the current shell. You can then use
If none of them are working you can always send
The signals can not be delivered if the process is in an uninterruptible call. Uninterruptible calls are kernel functions that can not be stopped and usually happen because of a bad driver (e.g. a driver that is not reentrant). A process that is in uninterruptible sleep can not be stopped until the call gets completed or the server is rebooted.
If a process becomes a zombie, it will not use any resources only taking space in the process table. A zombie process can not receive signals.
The list of signals for the current architecture can be found with
See the man pages of
You would switch to a new terminal, find the PID of the stuck process (using
Also, instead of starting with signal 9 (SIGKILL), consider starting with the default SIGTERM (15). This will give the process a chance to terminate gracefully (if it can).
Here's how that would work. Let's say that ntpd is hung.
What are the processes? (You can skip to pkill if you believe you won't have false positives).
Kill the processes:
If not, eventually move to
Ctrl C sends a SIGINT to your running process. If you don't want to open another console you can send a SIGQUIT with Ctrl \. This will address most day to day hung apps that the SIGINT does not.
I've personally wanted a way to send a SIGKILL with a shortcut but I'm not aware of a way to do so.
If you have full console access, you can do Alt-F1..12 and get a new console.
From there, you can do a process listing like follows:
Then do a
If you don't have full console access, just open another terminal window (perhaps via PuTTY or similar), and do the above process listing and kill steps.