RubyでPIDに基づいてプロセスの子プロセスのステータスを取得する方法はありますか?
たとえば、Python では psutil.Process(pid).status を実行できます。
RubyでPIDに基づいてプロセスの子プロセスのステータスを取得する方法はありますか?
たとえば、Python では psutil.Process(pid).status を実行できます。
私は同じものを探していました。残念ながら、ProcessStatus はライブ pid から初期化できないようです。これは、子プロセスの安全なタイミングでの強制終了のようなことをしたい場合に不可欠です。
いずれにせよ、/proc/$pid/status
Linux を使用している場合
は 2 行目です。status_line = File.open("/proc/#{pid}/status") {|f| f.gets; f.gets }
おそらく、外部プログラムを含むものよりもはるかに高速です。
実行中のプロセスのプロセス状態を取得するための移植可能な 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.
OS X では、文字列をセットアップします。
outputstring="ps -O=S -p #{mypid}"
次に、%x 呼び出しで実行します。
termoutput=%x[#{outputstring}]
必要に応じてそれを表示するか、出力をきれいに保ち、呼び出しで見つけた State に基づいて行動することができます。