Count running processes using wc and ps

22,650

Solution 1

The pipe symbol ("|") redirects the output of one program to the input of another.

You however use ">" to redirect wc's output to a file named log AND at the same time want to redirect the output to STDIN of wc (which won't use it as you provide an input file for wc).

So, you want one of the following (Hint: the latter solution is better as it doesn't create extra files.)

ps r > log ; wc log

or

ps r|wc

BTW: you might want wc to count lines, so wc -l in that case.

Solution 2

You are mixing redirection and piping

ps r > log # redirects ps output to a file called log (over writing any contents of log)

What you want is

ps r | wc # this connects the output of ps to the input of wc

If you wanted to use your methodology, then you would need to do the following

ps r > log; wc log

meaning, ps redirects its output to a file called log, then the command wc is run on the file log.

Solution 3

Using ps to do this is unreliable -- a process' arguments can contain newlines. A better alternative on Linux is to use /proc/loadavg like so:

awk '{ gsub("[0-9]+/", "") ; print $4 }' /proc/loadavg
Share:
22,650

Related videos on Youtube

paulgavrikov
Author by

paulgavrikov

Data Scientist

Updated on September 18, 2022

Comments

  • paulgavrikov
    paulgavrikov over 1 year

    I tried using ps r > log | wc log but this returns Ambiguous output redirect.. Can someone explain why and provide another solution?

  • CMCDragonkai
    CMCDragonkai almost 10 years
    I'm so confused about this. top shows 74 processes, ps -A | wc -l shows 76. ps -A --no-headers | wc -l shows 75. Who is right? Who is wrong? Counting the actual number of processes from ps -A indicates that there are 74 processes. The point is, the 74th process is the ps command.