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,则返回调用进程所属的ProcessGroup的ID
4. 每个Group都有一个Leader,这个Leader的ProcessID = 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. 进程成为Session的Session Leader
b. 成为新的Process Group的Leader
c. 进程没有Controlling Terminal
4. Single UNIX Specification没有Session ID,不过我们可以认为一个Session的Session Leader的Process ID = Session ID
5. getsid可以获得Session ID:
#include <unistd.h><p></p></unistd.h> pid_t getsid(pid_t pid); 成功返回Session Leader的Process ID,错误返回-1 |
同样的,pid = 0标明是调用进程
3 Controlling Terminal
Session和Process Group有下面特性:
1. Session只能有一个Controlling Terminal
2. Session Leader和Controlling 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 Group是Foreground,那些是Background:
#include <unistd.h><p></p></unistd.h> pid_t tcgetpgrp(int filedes); 成功返回Foreground Process Group的ID,错误返回-1 int tcsetpgrp(int filedes, pid_t pgrpid); 成功返回0,错误返回-1 |
2. tcgetpgrp返回filedes对应的Terminal的Foreground process group ID,而tcsetpgrp可以设置foreground process group id
3. tcgetsid函数可以获得filedes所对应的Session ID,也就是Session Leader的Process 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
相关推荐
#### 第九章 进程关系 - **进程组**:一组具有相同组ID的进程。 - **会话**:由一个或多个进程组组成,通常与终端相关联。 - **控制终端**:进程与终端建立联系的方式。 - **作业控制**:使用控制字符进行作业控制...
在深入探讨《LINUX与UNIX SHELL编程指南》的读书笔记之前,让我们先理解一下Linux、Unix和Shell编程的基本概念。Linux是一种自由和开放源代码的类UNIX操作系统,而Unix则是其灵感来源,两者都广泛应用于服务器和工作...
这两者的编程接口有很高的相似性,因此学习Unix编程对理解Linux编程也非常有帮助。 本书可能包含以下内容: 1. **shell编程**:讲解Bash shell和其他Unix shell的基本语法,包括命令行参数、环境变量、重定向、...
在Unix C编程中,了解操作系统的基本概念和内存管理机制至关重要。本笔记主要涵盖了以下几个关键知识点: 1. **静态库与共享库的区别** 静态库在编译链接时,其代码会直接嵌入到目标程序中,形成一个独立的可执行...
#### 第九章 进程关系 **1. 进程组(process group)** 一组具有相同属性的进程组成一个进程组。 **2. 会话(session)** 一个会话由一个初始化进程和一个或多个进程组组成。 **3. 控制终端(controlling terminal)** ...
《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和UNIX Shell编程的经典书籍,作者张启峰在读书笔记中不仅归纳总结了书中的核心概念,还提供了丰富的实践示例,旨在帮助读者全面掌握Shell编程技能。以下是根据...
### Linux 入门学习笔记 #### 一、Linux 安装与配置 ##### 1. Linux 的安装方式 - **虚拟机安装**:通过虚拟化技术,在现有操作系统上模拟一个完整的计算机环境,安装 Linux。 - **安装虚拟机软件**: - **...
- **Linux**:使用`kill -9 进程ID`命令关闭进程。 ##### 修改Apache端口 若要更改Apache监听的端口号,需编辑`httpd.conf`文件中的`Listen`指令,将默认的80端口改为其他端口。每次修改后,都必须重启Apache服务...
本资料“Linux学习笔记.pdf”将带你深入理解Linux的基础知识和高级应用。 一、Linux系统概述 1. Linux的起源:Linux的诞生源于托瓦兹对Minix系统的不满,他决定创建一个符合个人需求的、免费的Unix-like操作系统...
echo "第九个参数:$9" ``` #### 环境变量 环境变量是在用户环境中设置的全局变量,它们对所有的程序都是可见的。可以通过 `export` 命令来设置环境变量。 示例: ```sh export Antiy="xi'an" env | grep Antiy ```...
《Unix/Linux系统编程手册》是IT领域中一本经典的学习资源,尤其对于想要深入理解操作系统内核、进行系统级编程的开发者来说,具有极高的参考价值。这个名为"linux_learing"的压缩包文件,很可能包含了该手册的源码...
Linux是一种开源的类Unix操作系统内核,自1991年由芬兰学生林纳斯·托瓦兹发明以来,由于其强大的网络功能和稳定高效的性能,已被广泛应用于服务器、嵌入式系统和个人电脑上。Linux操作系统是由众多社区和企业支持,...
Linux学习入门笔记主要涵盖了一系列与Linux操作系统相关的基础知识,适合初学者进行系统性的学习。Linux是一种开源、免费的操作系统,它的核心在于Unix哲学,强调简洁、模块化的设计。本笔记将帮助你逐步理解并掌握...
8. **嵌入式应用开发**:学会用C/C++在Linux环境下编写应用程序,理解多线程、网络编程、数据库接口等高级话题,能开发出功能丰富的嵌入式应用。 9. **实时性和功耗优化**:对于许多嵌入式系统,实时性(RTOS)和低...
16. **Linux/Unix基础**:了解基本的Linux/Unix命令和操作,如文件和目录管理、权限控制、进程管理、查找和过滤命令等,这些对于在Unix环境中开发和部署Java应用非常重要。 以上只是Java从入门到精通过程中涉及的...
以下是对"第11章 Linux操作系统基础"的主要知识点的详细阐述。 一、Linux操作系统简介 Linux是基于Unix的操作系统,由林纳斯·托瓦兹于1991年创建。它的内核是开源的,允许全球开发者对其进行修改和优化。Linux系统...