調用setsid函數的進程需要滿足以下條件:
1. 不是組長進程
2. 有對應的創建session權限
調用setsid函數后的進程:
1. 成為一個組的組長進程
2. 成為一個會話的會話首進程
3. 放棄了控制終端
#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(int argc, char *argv[]){ pid_t pid; pid = fork(); if (pid < 0) { perror("fork"); return -1; } else if (pid == 0) { PRintf("before====/n"); printf("pid = %d/n", (int)getpid()); printf("gid = %d/n", (int)getpgrp()); printf("sid = %d/n", (int)getsid(getpid())); setsid(); printf("after====/n"); printf("pid = %d/n", (int)getpid()); printf("gid = %d/n", (int)getpgrp()); printf("sid = %d/n", (int)getsid(getpid())); sleep(5); } else { printf("parent-------/n"); printf("pid = %d/n", getpid()); printf("gid = %d/n", getgid()); printf("sid = %d/n", getsid()); waitpid(pid, NULL, 0); } return 0;}運行結果:parent-------pid = 13227gid = 0sid = 12710before====pid = 13228gid = 13227sid = 12710after====pid = 13228gid = 13228sid = 13228
新聞熱點
疑難解答