Showing Running Processes in variable

  • Thread starter jackster the jackle
  • Start date
J

jackster the jackle

I want to capture the list of running processes on my computer. I am to
get all the data into my variable with a simple system call:

x = `ps -el`

My problem comes when I want to display the data back out in a legible
format that makes sense.

What is the best way to do this?

thanks

jackster
 
D

darren kirby

quoth the jackster the jackle:
I want to capture the list of running processes on my computer. I am to
get all the data into my variable with a simple system call:

x = `ps -el`

My problem comes when I want to display the data back out in a legible
format that makes sense.

What is the best way to do this?

Not sure if this is the best but:

x.split("\n").each do |line|
puts line
end

works for me.
thanks

jackster

-d
 
J

jackster the jackle

Thanks for the help Darren....what you proposed works but it doesn't
print out the processes in a viewable table in rails....I think I
somehow need to add a "\n" or a line break to the result....This might
be a rails question now but just in case you might know, here is what I
have in my controller:

def processes
x=`ps -el`
y=x.split("\n")
y.each do |line|
end
return y
end

Then I simply display the variable in my view with: <%= processes() %>

Here is what the view looks like:

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD000 S 2202 11254 1 0
75 0 - 545 wait4 ? 00:00:00 mysqld_sa000 S 2202 11342 11254 0 80 5 -
5887 schedu ? 00:00:00 mysqld040 S 2202 11368 11342 0 80 5 - 5887 schedu
? 00:00:01 mysqld040 S 2202 11370 11368 0 80 5 - 5887 rt_sig ? 00:00:00
mysqld000 S 2202 22812 1 0 75 0 - 5744 schedu ? 00:00:00 dispatch.000 S
2202 23955 1 0 75 0 - 5322 schedu ? 00:00:00 dispatch.100 S 2202 23807
23691 0 75 0 - 579 schedu pts/4 00:00:00 sh000 T 2202 26309 23807 0 75 0
- 1137 do_sig pts/4 00:00:00 irb040 S 2202 18127 1 2 75 0 - 6578 schedu
? 00:00:00 httpd040 S 2202 18132 18127 0 75 0 - 6299 schedu ? 00:00:00
httpd040 S 2202 18172 18127 0 75 0 - 6605 schedu ? 00:00:00 httpd000 S
2202 18178 18132 17 79 0 - 5475 pipe_w ? 00:00:00 dispatch.040 S 2202
18185 18127 0 76 0 - 6581 schedu ? 00:00:00 httpd000 R 2202 18218 18178
0 80 0 - 397 - ? 00:00:00 ps100 S 2202 18219 1475 0 77 0 - 503 wait4 ?
00:00:00 sps000 R 2202 18235 18219 0 78 0 - 897 - ? 00:00:00 ps

Thanks again,

jackster
 
A

Adam Shelly

Thanks for the help Darren....what you proposed works but it doesn't
print out the processes in a viewable table in rails....I think I
somehow need to add a "\n" or a line break to the result....This might

I'm not a web guy said:
be a rails question now but just in case you might know, here is what I
have in my controller:

def processes
x=`ps -el`
y=x.split("\n")
y.each do |line|
end
return y
end

The each statement does nothing there, and the return is redundant.
How about just

def processes
`ps -el`.gsub(/\n/,"<br>")
end


-Adam
 
D

Daniel Berger

jackster said:
I want to capture the list of running processes on my computer. I am to
get all the data into my variable with a simple system call:

x = `ps -el`

My problem comes when I want to display the data back out in a legible
format that makes sense.

What is the best way to do this?

I recommend sys-proctable instead.

require 'sys/proctable'
include Sys

ProcTable.ps do |process|
p process.cmdline
...
end

Regards,

Dan
 
J

Joon You

Try this:

def view
@result = ""
x = `ps -el`
x.each_line do |l|
@result += l + "<br />"
end
return @result
end

I remembered that carriage return is always funny from system to system.
This should work.

Good luck!
 
J

jackster the jackle

Thanks for the replies but they don't seem to work in Rails.

Dan,

Is sys/proctable a gem that I can install? ..if so, do you have link?

thanks

jackster
 
J

Joon You

I just tested it in Rails 2.0.1 with the following:

controller:

def view
@result = ""
x = `ps -el`
x.each_line do |l|
@result += l + "<br />"
end
return @result
end

model:

<= @result %>

What version of Rails are you using?
 
J

jackster the jackle

Thanks for all the help everyone. Someone from the rails forum gave me
what seems like the simplest solution...here's what he wrote:

The problem you have is an HTML one, not a ruby one.

Basically, HTML ignores a \n unless it is inside a <pre> </pre> tag.

So, you can do this instead:

<pre>
<%= processes %>
</pre>
And it should work fine.

Also your Ruby code can be just:

def processes
`ps -el`
end

To get the same result. You don't need all that splitting or
assignments or even return command.
 
M

M. Edward (Ed) Borasky

jackster said:
I want to capture the list of running processes on my computer. I am to
get all the data into my variable with a simple system call:

x = `ps -el`

My problem comes when I want to display the data back out in a legible
format that makes sense.

What is the best way to do this?

thanks

jackster

You haven't specified what operating system you're using. On *Linux*,
the "ps" command generates fields separated by whitespace, so some
simple regex operations will work on them. Other "Unix-like" operating
systems will not necessarily behave this way.
 
J

John Joyce

Thanks for all the help everyone. Someone from the rails forum gave me
what seems like the simplest solution...here's what he wrote:

The problem you have is an HTML one, not a ruby one.

Basically, HTML ignores a \n unless it is inside a <pre> </pre> tag.

So, you can do this instead:

<pre>
<%= processes %>
</pre>
And it should work fine.

Also your Ruby code can be just:

def processes
`ps -el`
end

To get the same result. You don't need all that splitting or
assignments or even return command.
While using <pre> elements to preserve whitespace is simple it also
is not entirely consistent.
Remember you are dealing with different user-agents (browsers) on
different platforms.
Particularly, tab characters (that may be generated by some command-
line tool output) may be displayed at different widths depending on
the user-agent and/or the system.
the <pre> element is a useful one but its implementations will not be
as predictable for rendering by the user-agent as going back and
breaking that output into some parts to populate some kind of table
or div structure.

Some tools do not produce \n endings even, just relying on terminal
window for line-wrapping...
 
D

Daniel Berger

On Dec 14, 9:41=A0pm, "M. Edward (Ed) Borasky" <[email protected]>
wrote:

You haven't specified what operating system you're using. On *Linux*,
the "ps" command generates fields separated by whitespace, so some
simple regex operations will work on them. Other "Unix-like" operating
systems will not necessarily behave this way.

This is why you should use sys-proctable. :)

Regards,

Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,022
Latest member
MaybelleMa

Latest Threads

Top