What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again.

Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/

Get involved!

You can sign-in using OpenID credentials, or register a traditional username and password.

First-time OpenID users will be automatically assigned a username which can be changed after signing in.

Universal configuration monitoring and system of record for IT.

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for:



May 19, 2015 - A Look At The New Commandlinefu
I've put together a short writeup on what kind of newness you can expect from the next iteration of clfu. Check it out here.
March 2, 2015 - New Management
I'm Jon, I'll be maintaining and improving clfu. Thanks to David for building such a great resource!

Top Tags



Commands tagged Process Management from sorted by
Terminal - Commands tagged Process Management - 21 results
ps -eo pmem,comm | grep application-name
2014-02-23 13:21:29
User: Darkstar
Functions: grep ps

Displays memory usage for individual instances of an application that spawns multiple instances of itself. This command also works on single process applications.

ps -eo etime,pid,pcpu,ppid,args | sed -e '/\[.\+\]/d' -e '/^[ \t]*[0-9]\{2\}:[0-9]\{2\} /d' | sort -k1r
2014-02-14 00:22:31
User: neurodrone
Functions: ps sed sort

If you have ever been trying to look for a list of processes based on their elapsed time you don't need to look any further.

This command lets you find the list of processes ordered in a reversed order (oldest at the top) that have been running for over an hour on your system. Any system processes are filtered out, leaving only user initiated ones in. I find it extremely useful for debugging and performance analysis.

CMD=chrome ; ps h -o pmem -C $CMD | awk '{sum+=$1} END {print sum}'
ps -eo pmem,comm | grep chrome | cut -d " " -f 2 | paste -sd+ | bc
2014-01-03 15:33:16
User: Darkstar
Functions: cut grep paste ps

This command will show the sum total of memory used in gigabytes by a program that spawns multiple instances of itself. Replace chrome with whatever program's memory usage you are investigating. This command is rather useless on software that only spawns a single instance of itself.

pwdx $(pgrep command)
2013-02-01 08:33:15
User: weidenrinde

The pwdx command reports the current working directory of a process or processes.

taskkill /F /FI "USERNAME eq Cicciopalla"
2012-02-05 12:00:52
User: 0disse0

The taskkill command has the option of the curve, for a complete list just type: taskkill /? As we know, but to give a practical example, suppose you want to act only on the user's processes Cicciopalla use this command

Taskkill /?

Taskkill: As the name of the utility ?taskkill? suggests that it is simply used to see the running processes and to kill one or more processes either by using its PID i.e. ProcessID or by using its Image name i.e. by which it is present in system and being executed. We can also filter the results on the basis of user name, PID, image name, CPU time, memory usage etc at the time of killing or terminating a process.


taskkill [/s [/u [\] [/p []]]] {[/fi ] [...] [/pid /im ]} [/f] [/t]

Parameters description:

/s :- To provide IP specification or name of the remote computer; if not provided local computer is considered. Do not use backslashes in the value of the parameter.

/u \ :- To provide UserName or Domain\UserName under whose permission command should execute. If not provided then command run under the permission of person who is logged on. Option /u can be used only if /s is specified.

/p :- For the password of that user account which is provided with /u parameter. Password is prompted in case this field is omitted.

/fi :- To apply filter to select a set of tasks. Wildcard character (*) can be used for specifying all tasks or image names. Filter names are provided after parameter description.

/pid >ProcessID> :- For specifying PID of the process to be killed.

/im :- For providing image name of the process to be terminated. Also Wildcard character (*) can be used to specify all image names.

/t :- To terminate the whole tree of the process including all child processes started by it.

/f :- For forceful termination of process. It is not omitted in case of remote process as they are terminated forcefully in default.

Filters description:

Filters are provided to filter the result. This filtering is based on some Filter names which are checked with some relational operators. You will observe that the filter names are the column names which comes in task manager.

Filter Name Valid Operators Valid Values


IMAGENAME eq, ne Name of image

PID eq, ne, gt, lt, ge, le ProcessID number

SESSION eq, ne, gt, lt, ge, le Session number

CPUTIME eq, ne, gt, lt, ge, le CPU time in the format HH:MM:SS, where MM and SS are between 0 and 59 and HH is any unsigned number

MEMUSAGE eq, ne, gt, lt, ge, le Memory usage(in KB)

USERNAME eq, ne Any valid user name (User or Domain\User)

SERVICES eq, ne Service name

WINDOWTITLE eq, ne Window title

MODULES eq, ne DLL name

where eq, ne, gt, lt, ge & le are meant for equal to, not equal to, greater than, less than, greater than equal to and less than equal to respectively.

Points to be noted:

In case of remote process WINDOWTITLE and STATUS filters are not supported.

Wildcard (*) character is accepted for /im option only when filter is applied.

Not necessary that /f is specified in case of remote process termination as in default that is terminated forcefully.

Don?t specify computer name to HOSTNAME filter as it will result in a shutdown and all processes are stopped.

For specifying ProcessID (PID) tasklist command can be used.


To terminate a process with PID 3276 use parameter /pid.

?taskkill /pid 3276

To terminate more than one process with pid as 2001, 2224, 4083.

?taskkill /pid 2001 /pid 2224 /pid 4083

To terminate a process with its image name like wmplayer.exe for Windows Media Player use /im parameter.

?taskkill /im wmplayer.exe

To terminate a process and all its child process i.e. to end process tree in task manager use /t parameter. ?taskkill /f /im explorer.exe /t

To terminate all those processes which have PID greater than or equal to 1500 without considering their image names use filter ge with wildcard character.

?taskkill /f /fi ?PID ge 1500? /im *

To terminate the process tree with PID 2521 which is started by account name admin.

?taskkill /pid 2521 /t /fi ?USERNAME eq admin?

To terminate all process beginning with note on a remote system named serverpc under user name ?administrator? having its password as ?qu@dc()r3?.

?taskkill /s serverpc /u administrator /p qu@dc()r3 /fi ?IMAGENAME eq note*? /im *

To terminate a process with its windows title as ?paint?

?taskkill /f /fi ?WINDOWTITLE eq paint?

Source: http://unlock-windows.blogspot.com/2008/12/taskkill-command-line-utility.html

current_dir=$(cd $(dirname $BASH_SOURCE);pwd)
2011-04-18 09:24:14
User: xeor
Functions: cd dirname

I think this is the cleanest way of getting the current working directory of a script. It also works on osx, Linux, and probably bsd as well..

echo "${0%/*}"
2011-04-17 12:09:56
User: mhs
Functions: echo

Invoked from within a shell script, this will print the directory in which the script resides. Doesn't depend on external tools, /proc/self/*, etc.. (`echo` is a shell builtin.) To see the *current working* directory of a script, use `pwd`.

readlink /proc/self/cwd
eval ls -l /proc/{$(pgrep -d, COMMAND)}/cwd
2011-04-14 13:41:58
User: splante
Functions: eval ls

This is an alternative to another command using two xargs. If it's a command you know there's only one of, you can just use:

ls -l /proc/$(pgrep COMMAND)/cwd
sh -c 'if pgrep x2vnc && env LC_ALL=C xmessage -button "Kill it:0,Ignore it:1" "Another connection is already running. Should I kill it instead of ignoring it?"; then killall x2vnc; fi; x2vnc -passwd /home/Ariel/.vnc/passwd -east emerson:0'
2010-07-06 09:11:12
User: zhangweiwu
Functions: env killall sh

This command is suitable to use as application launching command for a desktop shortcut. It checks if the application is already running by pgrepping its process ID, and offer user to kill the old process before starting a new one.

It is useful for a few x11 application that, if re-run, is more likely a mistake. In my example, x2vnc is an x11 app that does not quit when its connection is broken, and would not work well when a second process establish a second connection after the first broken one.

The LC_ALL=C for xmesseng is necessary for OpenSUSE systems to avoid a bug. If you don't find needing it, remove the "env LC_ALL=C" part

ps aux --sort=%mem,%cpu
2009-10-10 22:48:51
User: mrwill
Functions: ps

you can also pipe it to "tail" command to show 10 most memory using processes.

pstree -p

Shows a less detailed output, made only of the process tree and their pids.

command ps -Hacl -F S -A f
2009-08-19 07:08:19
User: AskApache
Functions: command ps

I don't truly enjoy many commands more than this one, which I alias to be ps1.. Cool to be able to see the heirarchy and makes it clearer what need to be killed, and whats really going on.

$(while [ ! -z "$(pgrep rsync)" ]; do echo; done; echo "rsync done" | mailx [email protected]) > /dev/null &
2009-08-14 19:46:59
User: matthewbauer
Functions: echo mailx

This will email [email protected] a message with the body: "rsync done" when there are no processes of rsync running. This can be changed for other uses by changing $(pgrep rsync) to something else, and echo "rsync done" | mailx [email protected] to another command.

ps aux | grep -v `whoami`
killall -STOP -m firefox
2009-05-18 20:02:44
Functions: killall

Continue with:

killall -CONT -m firefox

Suspends all Firefox Threads. Results in Zero CPU load.

Useful when having 100+ Tabs open and you temporarily need the power elsewhere.

Be careful - might produce RACE CONDITIONS or LOCKUPS in other processes or FF itself.

matching is case sensitive.

2009-03-18 00:03:42
User: Zenexer
Functions: top

A simple but effective replacement for ps aux. I used to waste my time running ps over and over; top is the way to go. It also allows complex sorting options. Press q to exit "nicely" (Ctrl + C is always an option, of course). Note that the list updates each second, resorting in the process; if you're trying to grab a specific PID, you might be better off with ps.


Alternatively, htop is available, though it may not come pre-installed. htop is slightly more interactive than top and includes color coding, visuals, and a nice interface for selecting and then killing processes. (Thanks to bwoodacre for this great tool.)

echo COMMAND | xargs -ixxx ps -C xxx -o pid= | xargs -ixxx ls -l /proc/xxx/cwd
xprop | awk '/PID/ {print $3}' | xargs ps h -o pid,cmd
2009-02-16 07:55:19
User: jackhab
Functions: awk ps xargs

This command is useful when you want to know what process is responsible for a certain GUI application and what command you need to issue to launch it in terminal.