Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

I'd like to get a list of all the applications currently running on my machine using the command line. It should be similar to what you get when you open up Activity Monitor and choose to save the list.

I noticed that the ps -a command does something similar, but it cuts off the names of the processes.

I'm only interested in the name of the processes, so I don't need all the columns that Activity Monitor outputs.

Update: I should have been more clear... I don't want the entire path to the process to be displayed. I just want the name of the process, as it appears in Activity Monitor. For example, ps causes lanchd to be displayed as /sbin/launchd rather than as it is displayed in Activity Monitor (i.e. just lanchd). This is a problem because processes that have very long paths end up being truncated (depending on my terminal window's size), and I can't even see the process name.

share|improve this question
add comment

3 Answers 3

up vote 1 down vote accepted
ps -axc -o comm
  • -a displays processes from all users (or root)
  • -x includes processes that don't have a controlling terminal
  • -o comm outputs command paths or names
  • -c makes -o comm output names only

tell app "System Events" to name of application processes would list only processes launched from an application bundle.

share|improve this answer
    
This gives me the same info as ephsmith's answer, but it excludes -bash, sort, xargs and doesn't display an error message (which is a good thing). Also, it uses a simpler command, thanks. –  Senseful Jun 28 '12 at 22:20
    
@Senseful, sorry about that :(. At least I was of some help in addressing your need to save it to a file. –  ephsmith Jun 29 '12 at 2:25
add comment

Right command, wrong flags.

  • Use ps -Ao comm if you want process names only.
  • Use ps -Ao command if you want process names with arguments.
share|improve this answer
    
The first command still outputs the entire path of the process, which causes it to be cut off at the length of my terminal window. For example, in Activity Monitor I see launchd in ps, it is shown as /sbin/launchd. It's not a problem for this process, but it is a problem for those that are nested in many folders. Is there any way to get just the name of the process without its path? –  Senseful Jun 23 '12 at 21:40
    
Ah, yes. You did say "like Activity Monitor" but I didn't think it would matter. Since I see your question's already been answered I'll just leave it at that. –  bahamat Jun 24 '12 at 16:05
add comment

You mentioned that you'd like to save it to a file. In the simplest case (the one that you are most concerned about), use

ps ax > /path/to/outfile.txt

which will print a list of all running processes (with the full name) to the file designated by the path. The ">" redirects the printed output (in overwrite mode) to the file. Simply issuing ps ax will print it to the screen.

Hint: If you don't feel like typing out a full directory, drag a folder to the terminal to get the path for you and manually complete with the name of the file

In case you end up wanted some of the other columns at some point... Also, check the man page for ps by typing man ps at the command line and look at other options. Here's another example which prints the cpu-usage and memory for each process (in percentages) followed by the command (process):

ps ax -o %cpu -o %mem -o command > /path/to/outfile.txt

Use

# Sort by cpu usage with the 'r' option
ps arx -o %cpu -o %mem -o command > /path/to/outfile.txt

# Sort by memory usage with the 'm' option
ps arm -o %cpu -o %mem -o command > /path/to/outfile.txt

EDIT

In order to print just the command, there are probably more durable approaches, but in a pinch I'd just do what follows. You'll probably notice a bit of cruft near the end related to strings that weren't meant for basename (like -bash), but the rest of what you want will be there with this quickie.

ps ax -o comm | xargs -I % basename % > /path/to/outfile.txt

NOTE: Some processes that are running are not necessarily executable names. They could be a straight call to sh with a string of commands that follow.

share|improve this answer
    
Upvoting behavior on AskDifferent is strange. An answer that does not answer the question has a higher vote ranking. Saving to a file wasn't even addressed :( and the arguments are incorrect for the output the OP requested. –  ephsmith Jun 23 '12 at 15:09
1  
Thanks for the answer, I tried it but it still outputs the entire path to the process. I'm looking for a solution which only outputs the process name and not its path. For example instead of outputting /sbin/launchd, it should just output launchd. –  Senseful Jun 23 '12 at 21:43
    
Okay. No biggie. Just pipe the output of ps ax to basename via xargs. See edit for more details. –  ephsmith Jun 23 '12 at 21:56
1  
Awesome, thanks! For the record, I ended up piping it to sort too. So the final command is: ps ax -o comm | xargs -I % basename % | sort –  Senseful Jun 23 '12 at 22:23
add comment

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.