Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Process::UIDモジュール > switch

module function Process::UID.#switch

switch -> Integer[permalink][rdoc]
switch { .... } -> object

実効ユーザ ID を一時的に変更するために使います。

実効ユーザ ID を実ユーザ ID に変更します。実効ユーザ ID と実ユーザ ID が 等しい場合には、実効ユーザ ID を保存ユーザ ID に変更します。 変更前の実効ユーザ ID を返します。

ブロックが指定された場合、実効ユーザ ID を実ユーザ ID へ 変更しブロックを実行します。ブロック終了時に実効ユーザ ID を元の 値に戻します。ブロックの実行結果を返します。

なお、保存ユーザ ID を持たない環境でこのメソッドを実行すると 実ユーザ ID が変化します。

[EXCEPTION] Errno::EPERM:
各ユーザ ID がこのメソッドを実行するのに適切な状態でない場合、 つまり、実ユーザ ID・実効ユーザ ID・保存ユーザ ID が全て 同じ場合に発生します。ブロック付きの場合は、なんらかの原因で元の 権限に復帰できないにも発生します。ブロック内でユーザ ID が変更 されたなどの理由が挙げられます。
[EXCEPTION] NotImplementedError:
メソッドが現在のプラットフォームで実装されていない場合に発生します。
include Process
# (r, e, s) == (500, 505, 505)
p [uid, euid]           #=> [500, 505]
Process::UID.switch do
  p [uid, euid]         #=> [500, 500]
end
p [uid, euid]           #=> [500, 505]