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.

I am running a program in the terminal that I can't escape with Ctrl-C and that I want to kill. How can I find its PID?

share|improve this question
1  
This is a branch of What should I do when Ubuntu freezes? as a reference to prevent details in that question from becoming too technical. –  Jjed Aug 25 '12 at 15:01

5 Answers 5

up vote 23 down vote accepted

Open another terminal and run ps ax | grep foo where foo is the name of the unresponsive program. This should return a line of output that looks something like this:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

The first field of each line of output is a number which represents the Process ID of the program matched by grep (you can safely ignore the last one, which represents grep itself.

To halt the offending process, do: kill pid where pid is the Process ID of the program. You might have to use your judgment as to which of the matches needs to be killed, or you could use top instead. Using kill by itself sends SIGTERM, which you should try first as it allows the program to properly clean up after itself. If SIGTERM fails, try SIGHUP, which is stonger medicine: kill -HUP pid. If all else fails, send SIGKILL. But, you should only do so as a last resort, because SIGKILL causes the kernel to terminate the process immediately with no possibility for cleanup. This can at times result in data corruption or other problems. So again, only send SIGKILL as a last resort. To do so, do kill -KILL pid or kill -9 pid.

If you are running a graphical interface, of course, you don't have to fool with this crazy command-line stuff to get the job done. Just open "System Monitor", navigate to the Processes tab, choose the process you want to halt (Hm, could it be the one using 90% CPU?) and right-click it. Since the process is already stopped, (that's the problem, right?) choose End Process or Kill Process from the resulting menu.

Credit to koanhead

share|improve this answer
1  
People should never use SIGKILL (kill -9) unless all other methods have failed. Only listing kill -9 is bad advice. I've edited the answer to correct it. –  Scott Severance Aug 26 '12 at 10:04

I have found it is nice to use a case insensitive search by adding the "-i" and using "aux" instead of "ax" to get a more descriptive output:

ps aux | grep -i firefox

If you would like to kill all the processes you may use:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

That is a forceful kill. Drop the "-9" if you want a soft kill.

share|improve this answer
    
This also kills the ps aux | grep -i firefox... process, because that contains the text firefox in its command! –  Eric Jul 21 at 9:41

The easiest way to know the pid of a running program is using:

pidof <application name>

For example, if you started vim and want to know its pid:

pidof vim

Remember that you will need to provide the exact program name that has been started.

For example, if you are running vi and execute pidof vim you won't get correct results.

Refer to pidof's manual page for more info.

share|improve this answer
    
This isn't installed by default. It might be in the sysvinit-utils package. –  flickerfly Sep 19 at 19:24

I don't think there is any need of such long commands when you can accomplish the same commands with pgrep, pkill, pidof etc...

  • To get the pid of a Running-Program

    syntax:-

    pgrep program_name

    pidof program_name

  • To kill a program by pid use pkill example:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f flag: Searches the process_name (see man pkill)
    -o flag: Select only the oldest of the matching processes.
    -n flag: Select only the newest of the matching processes.
    -l flag: List the process name as well as the process ID.

  • For processes owned by root.

    $ pgrep -u root sshd
    

    will only list the processes called sshd AND owned by root. On the other hand,

    $ pgrep -u root,daemon
    

    will list the processes owned by root OR daemon.

share|improve this answer

You can also open another terminal (or switch to another tty) and run top, which is basically a text version of the System Monitor. The first column lists the PID of each running process, which you can kill by pressing K, entering the PID and then entering a numeric signal to send.

share|improve this answer

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.