5

RubyでPIDに基づいてプロセスの子プロセスのステータスを取得する方法はありますか?

たとえば、Python では psutil.Process(pid).status を実行できます。

4

3 に答える 3

2

私は同じものを探していました。残念ながら、ProcessStatus はライブ pid から初期化できないようです。これは、子プロセスの安全なタイミングでの強制終了のようなことをしたい場合に不可欠です。

いずれにせよ、/proc/$pid/statusLinux を使用している場合 は 2 行目です。status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }

おそらく、外部プログラムを含むものよりもはるかに高速です。

于 2015-04-22T13:15:59.833 に答える
2

実行中のプロセスのプロセス状態を取得するための移植可能な Ruby メソッドを知りません。Process.wait実行して確認することはできます$?.exitstatusが、それはあなたが望んでいるようには見えません。posixソリューションの場合、使用できます

`ps -o state -p #{pid}`.chomp

プロセス状態に対して ps が生成する文字コードを取得する

PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers
(header "STAT" or "S") will display to describe the state of a process.
D    Uninterruptible sleep (usually IO)
R    Running or runnable (on run queue)
S    Interruptible sleep (waiting for an event to complete)
T    Stopped, either by a job control signal or because it is being traced.
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    Defunct ("zombie") process, terminated but not reaped by its parent.
于 2012-05-15T00:07:35.523 に答える
0

OS X では、文字列をセットアップします。

outputstring="ps -O=S -p #{mypid}"

次に、%x 呼び出しで実行します。

termoutput=%x[#{outputstring}]

必要に応じてそれを表示するか、出力をきれいに保ち、呼び出しで見つけた State に基づいて行動することができます。

于 2013-07-30T19:00:22.050 に答える