linuxのsetsid関数

2512 ワード

linuxのsetsid関数
1.定義
setsid - creates a session and sets the process group ID
  はsetsid関数の定義についてですが、setsidが新しいセッションを作成することしか覚えていません.実際には、新しいプロセスグループというもう一つの機能があります.2.前提
/**********************************************************
    > File Name: setsid.c
    > Author: lxg
    > Mail: [email protected]
    > Created Time: 2015 06 07      22 35 46 
 *********************************************************/

#include
#include
#include
#include

int main(int argc, char *argv[])
{
    pid_t pid;

    fprintf(stdout, "PID:%d, PGID:%d, SID:%d
", getpid(), getpgrp(), getsid(0));
if(setsid() < 0) { fprintf(stderr, "setsid error:%s
", strerror(errno));
} return 0; }

lxg@lxg-X240:~/station/TLPI/chapter_34$ ./setsid PID:17641, PGID:17641, SID:17395 setsid error:Operation not permitted
上は私が書いた例で、私たちが言及したsetsidの前提条件を検証しています.3.なぜですか.では、なぜsetsidにはこの前提条件があるのでしょうか.まず、この前提がないと仮定すると、サンプル呼び出しが完了すると、セッションIDが17641に等しいセッションが新規作成されます.既存のプロセスグループ17461も新規作成しました(これは最初のエラーです).17461このプロセスグループには、呼び出しが完了すると、同じプロセスグループの2つのプロセス17461および17464がそれぞれ2つの異なるセッション17461および17359に属していることがわかります(これは2番目のエラーです).