HowTo: Use ps, kill, nice, and killall To Manage processes in FreeBSD and OS X Unix Operating System

I

‘m a new Unix system user. How can I manage process on a FreeBSD operating systems?

 

A process is nothing but an executing program on FreeBSD or Unix-like system. Each process on the system provides the resources needed to run a program such as vim or firefox. Each process has:

A unique process identifier number (PID)

A virtual address space

A security context

Open devices/handles, executable code

Environment variables, priority and more.

In this quick tutorial, I will write about process management on a FreeBSD operating systems.

View running processes in FreeBSD

The ps or process status command is a command that lists process activities. Many people use the top command to interactively list the processes, but for scripting purpose ps is user friendly. The basic syntax is as follows:

$ ps

 

Sample outputs:

Fig.01: FreeBSD ps command output showing process

List process using ps command

Example using flags:

$ ps -auxw

 

Fig.02 ps command with flags

 

Where,

a = Display information about other users’ processes as well as your own.

u = Display the processes belonging to the specified usernames.

x = When displaying processes matched by other options, skip any processes which do not have a controlling terminal. This is the default behavior.

w = Use 132 columns to display information, instead of the default which is your window size.

How to list process using top command

Another easiest way to find out what processes are running on FreeBSD is to type top command:

$ top

 

Sample outputs:

last pid:   762;  load averages:  0.35,  0.30,  0.20                                                                                                 up 0+00:17:04  11:09:01

15 processes:  1 running, 14 sleeping

CPU:  0.0% user,  0.0% nice,  0.0% system,  0.4% interrupt, 99.6% idle

Mem: 13M Active, 16M Inact, 65M Wired, 23M Buf, 3624M Free

Swap: 4071M Total, 4071M Free

 

PID USERNAME    THR PRI NICE   SIZE    RES STATE    TIME    WCPU COMMAND

736 ec2-user      1  20    0 17064K  2660K wait     0:00   0.00% sh

734 ec2-user      1  20    0 25752K  3024K pause    0:00   0.00% screen

714 ec2-user      1  20    0 86472K  7228K select   0:00   0.00% sshd

735 ec2-user      1  20    0 25752K  4432K select   0:00   0.00% screen

712 root          1  20    0 86472K  7228K select   0:00   0.00% sshd

602 root          1  20    0 24104K  5292K select   0:00   0.00% sendmail

411 root          1  20    0 14492K  2136K select   0:00   0.00% syslogd

715 ec2-user      1  20    0 17064K  2668K wait     0:00   0.00% sh

762 ec2-user      1  20    0 21916K  2816K RUN      0:00   0.00% top

657 root          1  20    0 16592K  2256K nanslp   0:00   0.00% cron

627 root          1  20    0 61204K  6556K select   0:00   0.00% sshd

333 root          1  20    0 13164K  4508K select   0:00   0.00% devd

294 root          1  52    0 14624K  2236K select   0:00   0.00% dhclient

605 smmsp         1  52    0 24104K  4952K pause    0:00   0.00% sendmail

332 _dhcp         1  52    0 14624K  2340K select   0:00   0.00% dhclient

To quit from the top command type (or hit) q and to display help hit h.

Quickly finding the PID of a process on FreeBSD

Use the pgrep command to search the process table on the running system and prints the process IDs (PID) of all processes that match the criteria given on the command line. The syntax is:

pgrep process

pgrep -u user process

pgrep firefox

pgrep -u www-data nginx

A quick way of getting the PID of a process called dhclient is with the pgrep command, type:

$ pgrep dhclient

 

Sample outputs:

332

How to send processes signals in FreeBSD Unix system

You can send signals to all processes in FreeBSD. For example, SIGTERM can gracefully kill the process.

Send processes signals by PID

The kill command kills process by process identification (PID). Note that the user must have sufficient privileges to kill the process. The basic syntax is as follows:

$ kill <PID>

$ kill -s signalName <PID>

 

For example:

$ kill -s SIGTERM 454

$ kill -signalName <PID>

$ kill -SIGHUP 6765

$ kill -signalNumber <PID>

$ kill -9 868

 

To find your PID use pgrep command. It will look like this for example:

$ pgrep firefox

 

23872

From there you can issue the kill command to kill firefox process:

$ kill 23872

 

You can also send multiple kills.

$ kill <PID> <PID> <PID>

$ kill 3455 79754 3454

 

If you want to kill without cleaning up you use the -9 signal:

$ kill -9 <PID>

$ kill -9 5858

List signals

Type the following command:

$ kill -l

 

Sample output:

Fig.03: List the signal names with the -l option on Unix

SOME OF THE MORE COMMONLY USED SIGNALS AND MEANING

———-+———————————————-

SIGNAL  |   NAME (Meaning)

———-+———————————————-

1    |   HUP (hang up)

2    |   INT (interrupt)

3    |   QUIT (quit)

6    |   ABRT (abort)

9    |   KILL (non-catchable, non-ignorable kill)

14   |   ALRM (alarm clock)

15   |   TERM (software termination signal)


To kill process by name, use killall command

The basic syntax is as follows:

$ killall process

$ killall firefox

$ killall -SIGNAL process

$ killall -term firefox

$ killall -15 command

$ killall -15 firefox

 

To kill user’s process:

$ killall -u <user> process

$ killall -u tom firefox

 

Depending upon your shell you might need different flags or signals. Consult your man pages (man signal). The examples are so you get an idea and not absolute. For example, on my laptop using csh I cannot use the command killall process. I must use at least one option or argument to specify process. Note, there is also pkill command which kills the processes by name, but since it uses pattern matching and not the precise process name, it can be potentially dangerous compared to killall. Here is an example of dangerous pkill command which kills FreeBSD based server or desktop:

$ sudo pkill -v firefox

 

The -v option reverse the sense of the matching; display processes that do not match the given criteria. See pkill man page for more info.

How to adjust process priorities

The nice command runs process at a low priority. nice assumes the value of 10. The priority is a value range -20 to 20. The default priority is 0, priority 20 is the lowest possible. Negative numbers are expressed by -. You need to be root if you want to change the process prority to higher priorities. Different shells are different so it’s best to consult your nice manual page. I mainly use csh. nice command is more useful on servers or workstation where several processes are demanding more resources than the CPU can provide. Use following commands to set a larger chunk of the CPU time than a lower priority process on a FreeBSD.

nice command usage examples

Execute command date at priority 5 assuming the priority of the shell is 0.

$ nice -n 5 date

 

This is an example where you need to be superuser or root:

# nice -16 nice –35 date

 

Execute command date`at priority -19 assuming the priority of the shell is 0. I have never had to use this command because with today’s systems we have such high RAM+CPU and processing power these things aren’t a problem like when first introduced. It’s nice to know nice though just in case.

How to alters the scheduling priority of running processes

The nice command only works when beginning a new process i.e. start of the command. Use the renice command to alters the scheduling priority running processes. The syntax is:

$ renice priority pid

$ renice -n increment pid

$ renice -u user pid

 

To Change the priority of process ID’s 4242 and 344, and all processes owned by root, enter:

$ sudo renice +1 -u root -p 344 4242

How to see realtime and idle priority of of running processes

A process with a realtime priority is not subject to priority degradation, and will only be preempted by another process of equal or higher realtime priority. A process with an idle priority will run only when no other process is runnable and then only if its idle priority is equal or greater than all other runnable idle priority processes. Priority is an integer between 0 and RTP_PRIO_MAX (usually 31). 0 is the highest priority. 31 is the lowest priority. To see which realtime priority the current process is at, just type the following command:

$ rtprio

 

Sample outputs:

rtprio: normal priority

To see which realtime priority of process 715:

$ rtprio 715

 

To change the realtime priority of process 715 to 16, enter:

# rtprio 16 -1423

 

To run backup.py script while not disturbing other server usage, enter:

# idprio 31 /path/to/my/awesome/backup.py

 

See rtprio command man page for more info.

This quick tutorial was contributed by Wendy Michele. You can too contribute to nixCraft.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *