pid_t setsid(void)

1.调用进程不能是进程组组长,该进程变成新会话首进程(session header)

2.该进程成为一个新进程组的组长进程。

3.需有root权限(ubuntu不需要)

4.新会话丢弃原有的控制终端,该会话没有控制终端

5.该调用进程是组长进程,则出错返回

6.建立新会话时,先调用fork, 父进程终止,子进程调用

pid_t getsid(pid_t pid)

  1.pid为0表示察看当前进程session ID
  2.ps ajx命令查看系统中的进程。参数a表示不仅列当前用户的进程,也列出所有其他用
户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示
列出与作业控制相关的信息。
  3.组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程。

示例代码:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h> int main()
{
pid_t pid; if ((pid = fork()) < ) {
perror("fork");
exit();
} else if (pid == ) {
printf("\n");
printf("child process PID is: %d\n", getpid());
printf("child process PGID is: %d\n", getpgrp());
printf("child process SID is: %d\n", getsid());
sleep();
setsid(); // 子进程非组长进程,故其成为新会话首进程,且成为组长进程。该进程id即为会话进程
printf("Changed:\n");
printf("child process PID is: %d\n", getpid());
printf("child process PGID is: %d\n", getpgrp());
printf("child process SID is: %d\n", getsid());
sleep();
exit();
}
return ;
}

运行结果:

child process PID is: 5938
child process PGID is: 5937
child process SID is: 3486
Changed:
child process PID is: 5938
child process PGID is: 5938
child process SID is: 5938

进程控制函数(3)-getsid()和setsid()获取当前会话和建立新会话的更多相关文章

  1. linux进程控制函数详解

    进程控制 fork函数 创建一个子进程. pid_t fork(void); 失败返回-1:成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0 pid_t类型表示进程ID,但为了表示-1, ...

  2. Linux系统编程(8)—— 进程之进程控制函数fork

    fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先 ...

  3. 进程控制函数(1)-getpgid() getpgrp() 获取当前进程的进程组ID

    定义:pid_t getpid(void); 表头文件:#include<unistd.h> 说明:getpid()用来取得目前进程的进程识别码, 许多程序利用取到的此值来建立临时文件, ...

  4. Linux系统编程(9)—— 进程之进程控制函数exec系列函数

    在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是: #include <unistd.h> extern char **environ; int exe ...

  5. 进程控制函数(2)-setpgid() 修改当前进程的进程组ID

    定义:int setpgid(pid_t pid,pid_t pgid); 表头文件:#include<unistd.h> 说明:setpgid()将参数pid 指定进程所属的组识别码设为 ...

  6. 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息

    项目的Github地址:https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了 ...

  7. 进程、线程和携程的通俗解释【刘新宇Python】

    通过下面这张图你就能看清楚了,进程.线程和携程的关系   进程: 多个进程是可以运行在多个CPU当中的,比如你的电脑是4核,可以同时并行运行四个进程,这是真正物理上的并行运行. 线程: 每个进程又可以 ...

  8. Linux--进程组、会话、守护进程(转)

    http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html 进程组 一个或多个进程的集合 进程组ID: 正整数 两个函数 getpg ...

  9. The Linux Process Principle,NameSpace, PID、TID、PGID、PPID、SID、TID、TTY

    目录 . 引言 . Linux进程 . Linux命名空间 . Linux进程的相关标识 . 进程标识编程示例 . 进程标志在Linux内核中的存储和表现形式 . 后记 0. 引言 在进行Linux主 ...

随机推荐

  1. 记录memcache分布式策略及算法

    摘要 http://wenku.baidu.com/link?url=eUmpWDGFiFguyQLxwmXwRYmbnW7Wm1Bo79dGoomSnmOPWDIA5-FFSTNRI7MBQq8QG ...

  2. mysql least函数

    LEAST(N1,N2,N3,N4,......) LEAST()函数是GREATEST()的相反函数. 其目的是为了返回从值列表(N1,N2,N3,和等)的项最少值.下面的示例演示正确使用和输出LE ...

  3. 卷积神经网络CNN 手写数字识别

    1. 知识点准备 在了解 CNN 网络神经之前有两个概念要理解,第一是二维图像上卷积的概念,第二是 pooling 的概念. a. 卷积 关于卷积的概念和细节可以参考这里,卷积运算有两个非常重要特性, ...

  4. [Todo] Redis相关学习

    Redis与新浪 http://www.cnblogs.com/me115/p/3482783.html Redis对于多个CPU的机器,可以启动多实例. 可以看看这个(写的简单了) http://w ...

  5. HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)

    不知道这题算作什么类型的题目,反正很巧妙,队友小杰想了没一会就搞定了 为了学习这种方法,我也搞了搞,其实思路不难想,位运算嘛,只有0和1,而且该位的运算只影响该位,最多20位,一位一位地计算即可,只需 ...

  6. C#使用DirectShow播放视频文件 [转]

    原文网址:http://blog.csdn.net/openzpc/article/details/48442751 最近在开发一个视频播放软件,主要要求就是循环播放多个视频文件,并且要求两个视频文件 ...

  7. 复习原生ajax

    function ajax(url, fnSucc, fnFaild) { //1.创建 if(window.XMLHttpRequest) { var oAjax=new XMLHttpReques ...

  8. java设计模式1--工厂方法模式(Factory Method)

    本文地址:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html,转载请注明源地址. 工厂方法模式(别名:虚拟构造) ...

  9. 算法笔记_147:有向图欧拉回路判断应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...

  10. 深入探讨Linux静态库与动态库的详解(转)

    2.生成动态库并使用 linux下编译时通过 -shared 参数可以生成动态库(.so)文件,如下 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静 ...