《UNIX系统编程》第三章 笔记
1、进程标识
UNIX用惟一的被称为进程ID的整数值来标识进程。
每个进程还有一个父进程ID,这个父进程ID最初是创建它的那个进程的进程ID。
如果这个父进程终止,进程就由一个系统进程收养,这样父进程ID就总是标识着一个有效的进程。
getpid和getppid函数分别返回进程ID和父进程ID。pid_t是用来表示进程ID的一个无符号整数类型
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
UNIX进程有几个向进程传递权限的用户ID和组ID。真实用户ID、真实组ID、有效用户ID、有效组ID
通过将进程的有效用户ID设置为这个普通用户的ID,进程就能创建“好像是”那个用户创建的文件了。
#include <unistd.h>
gid_t getegid(void); 获取有效用户ID
uid_t geteuid(void);
git_t getgid(void);
uid_t getuid(void); 获取真实用户ID
2、进程状态
新建(new) 正在创建
运行(running) 正在执行指令
阻塞(blocked) 等待像IO这样的事件
就绪(ready) 等待分配处理器
完成(done) 结束
3、进程创建与fork
fork创建新的进程,调用进程就成为父进程,被创建的进程就被称为子进程。
fork函数拷贝了父进程的内存映像,这样新进程就会收到父进程地址空间的一份拷贝。
二个进程在fork语句后,都继续执行后面的指令。
#include <unistd.h>
pid_t fork(void);
fork函数的返回值是允许父进程和子进程区别自己并执行不同的代码的关键特征。
fork函数向子进程返回0,并将子进程的进程ID返回给父进程。
fork失败,返回-1并设置errno
进程链
processchain.c
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
int x;
x=0;
fork();
x = 1;
printf("i am process %ld and my x is %d\n",(long)getpid(),x);
return 0;
}
|
创建进程后,有二个独立的进程在执行,每个都有自己的x变量拷贝。由于父进程和子进程的执行是相互独立的,所以它们不会按照锁步(lock setp)来执行代码 ,也不会修改相同的内存单元。每个进程都打印出带有各自进程ID和x值的消息。
4、wait
相关推荐
笔记_UNIX环境网络编程卷二进程间通信_中文第二版
通过以上内容,我们可以了解到Unix系统编程涉及到多个方面的知识,从操作系统的基本概念到具体的文件操作、进程管理等高级主题。掌握这些知识点对于深入理解Unix系统的工作原理以及编写高质量的应用程序至关重要。
8. **库函数与系统调用**:C语言是UNIX编程的主要语言,系统调用(如上述的`open()`、`write()`等)是直接与内核交互的接口,而库函数(如`stdio.h`中的`printf()`)则提供更友好的编程体验。 9. **网络编程**:...
整体来说,这篇读书笔记对 UNIX 网络编程的知识点进行了系统的总结和概括。 1. UNIX 网络编程基础知识 UNIX 网络编程读书笔记首先介绍了 UNIX 网络编程的基础知识,包括 C/S 架构、路由器、inet_addr 函数、read ...
这本手册深入浅出地讲解了如何在这些类UNIX环境中进行系统级编程,包括与内核交互、管理进程、处理文件系统、网络通信以及信号处理等方面。以下是基于该书和相关知识的详细解析: 1. **进程管理**:在Linux和UNIX...
### UNIX高级编程知识点详解 #### 一、课程体系与学习目标概述 - **语言**: 本课程主要聚焦于两种主流的编程语言:C 和 C++。 - **算法**: 学习经典算法及其优化方法,提高解决复杂问题的能力。 - **数据结构**: ...
以上内容概括了《LINUX与UNIX SHELL编程指南》读书笔记中提及的关键知识点,涉及系统管理、服务配置、软件更新及网络服务配置等多个方面,对于提高Linux和Unix系统管理员的专业技能具有重要意义。
《LINUX与UNIX SHELL编程指南》是一本深入探讨Linux和UNIX系统中Shell脚本编程技术的书籍。这本书旨在帮助读者理解和掌握Shell编程的核心概念,从而能够编写出高效、实用的自动化脚本,提高日常系统管理和任务执行的...
Linux与Unix Shell编程指南读书笔记提供了深入理解和熟练掌握Shell脚本编写技巧的宝贵资源。Shell是Linux和Unix操作系统中的命令解释器,它不仅用于交互式地执行命令,还能编写自动化任务的脚本,极大地提高了系统...
4. **进程和线程**:理解UNIX中的进程概念,包括进程创建(`fork`)、进程通信(管道、信号量、消息队列等)以及线程的使用(`pthread`库)。 5. **信号处理**:学习如何使用`signal`函数捕获和处理系统发送的信号...
以上是对给定文档内容中提到的一些关键知识点的详细解释和扩展,这些知识点涵盖了UNIX系统的各个方面,从基础的文件操作到高级的进程管理和文件I/O,以及标准实现和兼容性问题,为读者提供了一个全面理解UNIX环境...
3. C语言高级概念:包括指针、结构体、联合体、枚举、文件操作等,这些都是C语言的核心特性,特别是在Unix系统中,熟练掌握这些内容能让你更好地进行系统级编程。 4. Unix系统调用:Unix提供了丰富的系统调用接口,...
这些实践经验对于深入理解Unix编程至关重要。 5. **Unix工具和命令**:Unix提供了众多强大的命令行工具,如grep、sed、awk等,它们在日常开发和调试中有着广泛的应用。笔记中可能讲解了如何结合C语言使用这些工具,...
### Unix Shell 编程知识点概览 #### 一、Unix Shell 概述 - **定义**:Shell 是一种用于操作 Unix 系统的特殊程序,它充当用户与 Unix 内核之间的接口。用户通过 Shell 输入命令,Shell 解释这些命令并将其传递给...
5. **界面方便高效**:UNIX内部具有丰富的系统调用,外部则通过灵活方便的shell命令进行编程,同时GUI(图形用户界面)清晰直观且功能强大。 6. **安全机制完善**:包括口令、权限、加密等措施以及抗病毒结构、误...