`
happmaoo
  • 浏览: 4429647 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

进程编程3 - UNIX高级环境编程第9章读书笔记

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

9 Process Relationships

1 Process Groups

1. 每个进程属于一个Process Group,这个process Group从同样的Terminal获得Signal

2. Getpgrp可以获得process Group ID,也用pid_t结构表示:

#include <unistd.h><p></p></unistd.h>

pid_t getpgrp(void);

返回调用进程所属于的Process Group ID

3. getpgid可以获得某个进程的Process Group ID

#include <unistd.h><p></p></unistd.h>

pid_t getpgid(pid_t pid);

返回pid制定的进程所属于的Process Group ID

如果参数pid = 0,则返回调用进程所属的ProcessGroupID

4. 每个Group都有一个Leader,这个LeaderProcessID = Process Group ID

5. 一个进程调用setpgid来参加或者创建一个process Group

#include <unistd.h><p></p></unistd.h>

int setpgid(pid_t pid, pid_t pgid);

成功返回0,错误返回-1

注意如果pid=pgid,则指定进程成为Process Group Leader

如果pid=0,则指定进程为调用进程

2 Sessions

1. Session是一个或者多个Process Group

2. 调用setsid函数来创建一个新的session

#include <unistd.h><p></p></unistd.h>

int setsid(void);

成功返回0,错误返回-1

3. 调用setsid函数,如果该进程不是Process Group Leader,则函数会创建一个新的Session

a. 进程成为SessionSession Leader

b. 成为新的Process GroupLeader

c. 进程没有Controlling Terminal

4. Single UNIX Specification没有Session ID,不过我们可以认为一个SessionSession LeaderProcess ID = Session ID

5. getsid可以获得Session ID

#include <unistd.h><p></p></unistd.h>

pid_t getsid(pid_t pid);

成功返回Session LeaderProcess ID,错误返回-1

同样的,pid = 0标明是调用进程

3 Controlling Terminal

SessionProcess Group有下面特性:

1. Session只能有一个Controlling Terminal

2. Session LeaderControlling Terminal建立联系,称之为Controlling Process

3. Session中的Process Group可以被分为一个Foreground process group和多个Background process group

4. 按下Interrupt Key (DELETE or CTRL+C)或者Quit Key (Ctrl+\)signal会发送给Foreground Process Group中的所有Process

5. 如果network/modem disconnect被检测到,则Controlling Process会收到一个hang-up signal

6. 大部分时候Controlling Terminal就是我们Login时候的Terminal

4 tcgetpgrp, tcsetpgrp, tcgetsid

1. 下面这些函数可以被用来告诉Kernel那些Process GroupForeground,那些是Background

#include <unistd.h><p></p></unistd.h>

pid_t tcgetpgrp(int filedes);

成功返回Foreground Process GroupID,错误返回-1

int tcsetpgrp(int filedes, pid_t pgrpid);

成功返回0,错误返回-1

2. tcgetpgrp返回filedes对应的TerminalForeground process group ID,而tcsetpgrp可以设置foreground process group id

3. tcgetsid函数可以获得filedes所对应的Session ID,也就是Session LeaderProcess Group ID

#include <termios.h><p></p></termios.h>

pid_t tcgetsid(int filedes);

成功返回Session ID,错误返回-1

作者: ATField
E-Mail:
atfield_zhang@hotmail.com
Blog:
http://blog.csdn.net/atfield



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1540823


分享到:
评论

相关推荐

    APUE读书笔记(Unix高级环境编程)

    #### 第九章 进程关系 - **进程组**:一组具有相同组ID的进程。 - **会话**:由一个或多个进程组组成,通常与终端相关联。 - **控制终端**:进程与终端建立联系的方式。 - **作业控制**:使用控制字符进行作业控制...

    《LINUX与UNIX SHELL编程指南》读书笔记

    在深入探讨《LINUX与UNIX SHELL编程指南》的读书笔记之前,让我们先理解一下Linux、Unix和Shell编程的基本概念。Linux是一种自由和开放源代码的类UNIX操作系统,而Unix则是其灵感来源,两者都广泛应用于服务器和工作...

    Unix-Linux编程实践教程

    这两者的编程接口有很高的相似性,因此学习Unix编程对理解Linux编程也非常有帮助。 本书可能包含以下内容: 1. **shell编程**:讲解Bash shell和其他Unix shell的基本语法,包括命令行参数、环境变量、重定向、...

    UnixC课堂笔记

    在Unix C编程中,了解操作系统的基本概念和内存管理机制至关重要。本笔记主要涵盖了以下几个关键知识点: 1. **静态库与共享库的区别** 静态库在编译链接时,其代码会直接嵌入到目标程序中,形成一个独立的可执行...

    我的APUE2读书笔记

    #### 第九章 进程关系 **1. 进程组(process group)** 一组具有相同属性的进程组成一个进程组。 **2. 会话(session)** 一个会话由一个初始化进程和一个或多个进程组组成。 **3. 控制终端(controlling terminal)** ...

    LINUX与UNIX%20SHELL编程指南

    《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和UNIX Shell编程的经典书籍,作者张启峰在读书笔记中不仅归纳总结了书中的核心概念,还提供了丰富的实践示例,旨在帮助读者全面掌握Shell编程技能。以下是根据...

    linux入门学习笔记

    ### Linux 入门学习笔记 #### 一、Linux 安装与配置 ##### 1. Linux 的安装方式 - **虚拟机安装**:通过虚拟化技术,在现有操作系统上模拟一个完整的计算机环境,安装 Linux。 - **安装虚拟机软件**: - **...

    php基础学习笔记

    - **Linux**:使用`kill -9 进程ID`命令关闭进程。 ##### 修改Apache端口 若要更改Apache监听的端口号,需编辑`httpd.conf`文件中的`Listen`指令,将默认的80端口改为其他端口。每次修改后,都必须重启Apache服务...

    Linux学习笔记.pdf,linux详解,LINUX

    本资料“Linux学习笔记.pdf”将带你深入理解Linux的基础知识和高级应用。 一、Linux系统概述 1. Linux的起源:Linux的诞生源于托瓦兹对Minix系统的不满,他决定创建一个符合个人需求的、免费的Unix-like操作系统...

    工作笔记 shell 变量和运算符

    echo "第九个参数:$9" ``` #### 环境变量 环境变量是在用户环境中设置的全局变量,它们对所有的程序都是可见的。可以通过 `export` 命令来设置环境变量。 示例: ```sh export Antiy="xi'an" env | grep Antiy ```...

    linux_learing:unixLinux系统编程手册

    《Unix/Linux系统编程手册》是IT领域中一本经典的学习资源,尤其对于想要深入理解操作系统内核、进行系统级编程的开发者来说,具有极高的参考价值。这个名为"linux_learing"的压缩包文件,很可能包含了该手册的源码...

    linux学习笔记.pdf

    Linux是一种开源的类Unix操作系统内核,自1991年由芬兰学生林纳斯·托瓦兹发明以来,由于其强大的网络功能和稳定高效的性能,已被广泛应用于服务器、嵌入式系统和个人电脑上。Linux操作系统是由众多社区和企业支持,...

    linux学习入门笔记

    Linux学习入门笔记主要涵盖了一系列与Linux操作系统相关的基础知识,适合初学者进行系统性的学习。Linux是一种开源、免费的操作系统,它的核心在于Unix哲学,强调简洁、模块化的设计。本笔记将帮助你逐步理解并掌握...

    转嵌入式 Linux入门笔记

    8. **嵌入式应用开发**:学会用C/C++在Linux环境下编写应用程序,理解多线程、网络编程、数据库接口等高级话题,能开发出功能丰富的嵌入式应用。 9. **实时性和功耗优化**:对于许多嵌入式系统,实时性(RTOS)和低...

    java从入门到精通全过程笔记.doc

    16. **Linux/Unix基础**:了解基本的Linux/Unix命令和操作,如文件和目录管理、权限控制、进程管理、查找和过滤命令等,这些对于在Unix环境中开发和部署Java应用非常重要。 以上只是Java从入门到精通过程中涉及的...

    第11章 Linux操作系统基础-教程与笔记习题

    以下是对"第11章 Linux操作系统基础"的主要知识点的详细阐述。 一、Linux操作系统简介 Linux是基于Unix的操作系统,由林纳斯·托瓦兹于1991年创建。它的内核是开源的,允许全球开发者对其进行修改和优化。Linux系统...

Global site tag (gtag.js) - Google Analytics