Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】Process::Status::stopped?()メソッドの使い方

stopped?メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

stopped?メソッドは、Process::Statusオブジェクトが表す子プロセスが停止状態にあるかどうかを判定するメソッドです。Process::Statusオブジェクトとは、Rubyで外部のコマンドなどを実行した際に生成される子プロセスの、終了に関する様々な情報(例えば、正常に終了したか、シグナルによって終了したか、など)を保持する特別なオブジェクトのことです。

このstopped?メソッドは、子プロセスがSIGSTOPのようなシグナルを受け取ることによって、一時的に実行を中断され、停止している状態にある場合にのみ真(true)を返します。もし子プロセスがすでに終了している場合や、正常に実行中である場合、あるいは停止状態ではない場合には偽(false)を返します。

このメソッドを使用することで、Rubyプログラムは実行中の子プロセスの現在の状態を正確に把握することができます。例えば、子プロセスを一時的に停止させた後、そのプロセスが本当に停止したかどうかを確認し、その後の処理(プロセスの再開や終了など)を適切に制御する際に役立ちます。戻り値は真偽値であるため、条件分岐の式として直接利用することが可能です。

構文(syntax)

1# 子プロセスをフォークし、停止させる例
2pid = fork do
3  # 子プロセスは無限ループで待機し、親プロセスからの停止シグナルを待つ
4  loop { sleep 1 }
5end
6
7begin
8  Process.kill('STOP', pid) # 子プロセスに停止シグナルを送る
9  sleep 0.1 # シグナルが処理されるのを少し待つ
10
11  # 子プロセスの終了または停止を待ち、ステータスを取得
12  # WNOHANG: プロセスが利用可能でなくてもブロックしない
13  # WUNTRACED: 停止した子プロセスも待つ対象にする
14  _pid, status = Process.waitpid2(pid, Process::WNOHANG | Process::WUNTRACED)
15
16  # Process::Status オブジェクトに対して stopped? メソッドを呼び出す
17  status.stopped? # => プロセスが停止していれば true、そうでなければ false
18ensure
19  # 後処理: 子プロセスを確実に終了させる
20  Process.kill('CONT', pid) rescue nil # 停止状態から再開
21  Process.kill('TERM', pid) rescue nil # 終了シグナル
22  Process.wait(pid) rescue nil # 子プロセスの終了を待つ
23end

引数(parameters)

引数なし

引数はありません

戻り値(return)

Boolean

このメソッドは、プロセスが停止状態であった場合に真 (true) を、それ以外の場合に偽 (false) を返します。

関連コンテンツ