Ruby では、Process.setsid
非スーパーユーザーとして実行すると、「操作は許可されていません」というエラーで呼び出しが失敗します。試す:
$ irb
irb(main):001:0> Process.setsid
Errno::EPERM: Operation not permitted
from (irb):1:in `setsid'
from (irb):1
from ~/.rbenv/versions/1.9.2-p290/bin/irb:12:in `<main>'
Process.uid=
または、メソッドを使用して uid またはプロセスを変更すると、同じエラーで失敗します。Ruby プログラムをルートとして実行すると問題なく動作し、実行時にプロセスの UID を変更しません。
ただし、Ubuntu やその他のディストリビューションのシェルでは、setsid
(参照: http://linux.die.net/man/2/setsid ) プログラムはスーパーユーザー権限を必要としません。
プログラムのセッションをリセットすることを理解していstdsid
ます。これは、プロセスをデーモン化するときにも役立ちます。私のコードでは、セッションをリセットしながら、UID を変更してデーモン化しようとしています。
したがって、 OS のようなほとんどの UNIX 上Process.setsid
のプログラムは必要としないのに、なぜ上記の特権が必要なのか興味があります。setsid