この参照新しいセッションの作成に関して、次のように言います。呼び出しプロセスは新しいセッションのリーダーであり、新しいプロセスグループのプロセスグループリーダーです。制御端子なし
だから私は以下のコードが何も印刷せず、printfがエラー(標準出力にバインドされた端末がないことについて)を返すと予想しましたが、そうではありません。プログラムを実行している端末に印刷されます。
私に何の問題もあるのか?
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void)
{
if (!fork())
{
if (setsid() == -1) // create new session by a child process
return -1;
printf("New sesions %d is created\n", getsid(0));
}
else
wait(NULL);
return 0;
}
答え1
私の考えでは、これは子プロセスがまだファイル記述子を継承し、親プロセスを指しているので、子stdout
プロセスも指すようになり、カーネルがどこに送るかを知る方法なので、制御とは何の関係もないからだと思います。ここにターミナルがあります。私が正しく理解したなら/dev/pts/1234
/dev/pts/1234
stdout