Linux Operating System comes with a kill command to terminate a process. The command makes it possible to continue running the server without the need to reboot after a major change/update. Here comes the great power of Linux and this is one of the reasons, why Linux is running on 96.4% of servers, on the planet.
Kill command sends a signal, a specified signal to a currently running process. The kill command can be executed in a number of ways, directly or from a shell script.
[ You might also like: Find Top 15 Processes by Memory Usage with ‘top’ in Batch Mode ]
Using kill command from /usr/bin provide you some extra feature to kill a process by process name using pkill.
Kill Command Usage
The common syntax for kill command is:
# kill [signal or option] PID(s)
For a kill command a Signal Name could be:
Signal Name Signal Value Behaviour SIGHUP 1 Hangup SIGKILL 9 Kill Signal SIGTERM 15 Terminate
Clearly from the behavior above, SIGTERM is the default and safest way to kill a process. SIGHUP is a less secure way of killing a process than SIGTERM. SIGKILL is the most unsafe way among the above three, to kill a process that terminates a process without saving.
In order to kill a process, we need to know the Process ID of a process. A Process is an instance of a program. Every time a program starts, automatically a unique PID is generated for that process.
Every Process in Linux has a pid. The first process that starts when Linux System is booted is the – init process, hence it is assigned a value of ‘1‘ in most cases.
[ You might also like: All You Need To Know About Processes in Linux [Comprehensive Guide] ]
Init is the master process and can not be killed this way, which ensures that the master process doesn’t get killed accidentally. Init decides and allows itself to be killed, where kill is merely a request for a shutdown.
List All Running Linux Processes
To know all the processes and correspondingly their assigned pid, run the following ps command.
# ps -A
Sample Output
PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 migration/0 4 ? 00:00:00 ksoftirqd/0 5 ? 00:00:00 migration/0 6 ? 00:00:00 watchdog/0 7 ? 00:00:01 events/0 8 ? 00:00:00 cgroup 9 ? 00:00:00 khelper 10 ? 00:00:00 netns 11 ? 00:00:00 async/mgr 12 ? 00:00:00 pm 13 ? 00:00:00 sync_supers 14 ? 00:00:00 bdi-default 15 ? 00:00:00 kintegrityd/0 16 ? 00:00:00 kblockd/0 17 ? 00:00:00 kacpid 18 ? 00:00:00 kacpi_notify 19 ? 00:00:00 kacpi_hotplug 20 ? 00:00:00 ata/0 21 ? 00:00:00 ata_aux 22 ? 00:00:00 ksuspend_usbd
How about Customising the above output using syntax as ‘pidof process‘.
# pidof mysqld
Sample Output
1684
Another way to achieve the above goal is to follow the below syntax.
# ps aux | grep mysqld
Sample Output
root 1582 0.0 0.0 5116 1408 ? S 09:49 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 1684 0.1 0.5 136884 21844 ? Sl 09:49 1:09 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock root 20844 0.0 0.0 4356 740 pts/0 S+ 21:39 0:00 grep mysqld
[ You might also like: How to Find Top 15 Processes by Memory Usage in Linux ]
How to Kill a Process in Linux
Before we step ahead and execute a kill command, some important points to be noted:
- A user can kill all his processes.
- A user can not kill another user’s process.
- A user can not kill processes the System is using.
- A root user can kill System-level-process and the process of any user.
Another way to perform the same function is to execute the ‘pgrep‘ command.
# pgrep mysql
Sample Output
3139
To kill the above process PID, use the kill command as shown.
kill -9 3139
The above command will kill the process having pid=3139, where PID is a Numerical Value of the process.
Another way to perform the same function can be rewritten as.
# kill -SIGTERM 3139
Similarly ‘kill -9 PID‘ is similar to ‘kill -SIGKILL PID‘ and vice-versa.
How to Kill a Process in Linux Using Process Name
You must be aware of the process name, before killing and entering a wrong process name may screw you.
# pkill mysqld
Kill more than one process at a time.
# kill PID1 PID2 PID3 or # kill -9 PID1 PID2 PID3 or # kill -SIGKILL PID1 PID2 PID3
What if a process has too many instances and a number of child processes, we have a command ‘killall‘ or pkill. These two are the only commands of this family, which takes process name as argument in-place of process number.
Syntax:
# killall [signal or option] Process Name Or # pkill Process Name
To kill all mysql instances along with child processes, use the command as follow.
# killall mysqld OR # pkill mysqld
You can always verify the status of the process if it is running or not, using any of the below commands.
# service mysql status OR # systemctl status mysql # pgrep mysql # ps -aux | grep mysql
That’s all for now, from my side. I will soon be here again with another Interesting and Informative topic. Till Then, stay tuned, connected to Tecmint, and healthy. Don’t forget to give your valuable feedback in the comment section.
How do I kill a process that freezes everything so I can’t open a terminal?
Kill isn’t for kill processes. Kill is for send signals to other processes.
And no, there is no relationship between uptime and the kill/pkill/etc commands. Most software has a standard start/stop procedure, some of them use kill, but others not.
Thanks. It was a helpful information.
Hey @oke deh, the output of your ‘ps‘ command is showing the ‘grep‘ command, not a process called ‘vnc‘.
By the time you run the kill command, the grep has completed and so the process id no longer exists, so you can’t kill it.
Everything you have shown above is working exactly as it is supposed to work, assuming there is no process running on the machine called ‘vnc*‘.
You should try with just ‘vnc‘, as your grep command is the thing wrong here, not the kill command…
Hello tecmint,
I try to kill this process but its not working…
I tried following command..
return this output
what is the correct command?
just use kill 19784
The kill PID you are using is for the grep issued, just do this to get the PID.
That will return only PID for VNC and the just issue the kill PID
I think it has a master and working process. Without killing the master you can’t kill the process. The same problem happens with nginx.