Count running processes using wc and ps
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
Related videos on Youtube
Comments
-
paulgavrikov over 1 year
I tried using
ps r > log | wc log
but this returnsAmbiguous output redirect.
. Can someone explain why and provide another solution?-
sr_ over 11 years
-
-
CMCDragonkai almost 10 yearsI'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 fromps -A
indicates that there are 74 processes. The point is, the 74th process is the ps command.