[ruby-list:48800] Re: setsid(2) と getsid(2)
From:
KOSAKI Motohiro <kosaki.motohiro@...>
Date:
2012-06-20 20:35:43 UTC
List:
ruby-list #48800
> 原因はまったくわかりませんが、
>
> #include <sys/types.h>
> #include <unistd.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <errno.h>
>
> main()
> {
> int err;
>
> printf("getpid()=%d\n", getpid());
> printf("getpgid()=%d\n", getpgid(0));
> err = setsid();
> printf("%d, %d\n", err, errno);
> return 0;
> }
>
> というCプログラムが
>
> getpid()=2319
> getpgid()=2319
> -1, 1
>
> という結果を返すのでRubyと全然関係ない話なんじゃないですかね
ruby でも以下は動いているように見えます
./miniruby -e "Process.fork {Process.setsid }"
あと、Linuxのsetsidコマンドは自分がプロセスグループリーダーだったら
自動的に一回forkする機能を持つようです
setsid.c
------------------------------------------
if (getpgrp() == getpid()) {
switch (fork()) {
case -1:
err(EXIT_FAILURE, _("fork"));
case 0:
/* child */
break;
default:
/* parent */
return 0;
}
}
if (setsid() < 0)
/* cannot happen */
err(EXIT_FAILURE, _("setsid failed"));