UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
lienhua34
2014-10-05
1 main 函数是如何被调用的?
在编译 C 程序时,C 编译器调用链接器在生成的目标可执行程序文件中,设置一个特殊的启动例程为程序的起始地址。当内核执行 C 程序时,在调用 main 前先调用这个特殊的启动例程,该启动例程从内核取得命令行参数和环境变量值。
2 共享库
共享库使得可执行文件中不再需要包含共用的库例程,而只需在所有进程都可引用的存储区中维护这种库例程的一个副本。程序第一次执行或者第一次调用某个库函数时,用动态链接方法将程序与共享库函数相链接。
共享库的另一个优点是可以用库函数的新版本代替老版本,而无需对使用该库的程序重新链接。
3 进程标识符
每个进程都有一个非负整型表示的唯一进程 ID,称为进程标识符。进程 ID 可以被重用。当一个进程终止时,其进程 ID 就可以用于另一个新的进程。不过 UNIX 通过采用延迟重用算法,使得赋予新进程的 ID 不同于最近终止的进程所使用的 ID,防止将新进程误认为是使用同一个 ID的已经终止的前进程。
UNIX 系统通常有一些特殊的进程。例如,
(1)交换进程 swapper:交换进程是 UNIX 系统的调度进程,其进程 ID 为 0.该进程是内核的一部分,它并不执行任何磁盘上的程序。init 进程 init 进程的进程 ID 为 1。它在自举过程结束时由内核调用。
(2)init进程:通常读取与系统有关的初始化文件(/etc/rc* 文件或/etc/inittab文件,以及/etc/init.d 中的文件),并将系统引导到一个状态。init 进程是一个以超级用户特权执行的用户进程,它不会终止。另外,init进程是所有孤儿进程的父进程。
UNIX 系统提供了下面两个函数用于获取进程标识符,
#include <unistd.h>
pid_t getpid(void);
返回值:调用进程的进程IDpid_t getppid(void);
返回值:调用进程的父进程ID
4 进程的实际、有效和保存的用户和组 ID
在文件访问权限与进程访问控制中,我们讲到了进程的这几个属性。
UNIX 系统提供了下面几个函数用于获取相对应的属性,
#include <unistd.h>
uid_t getuid(void);
返回值:调用进程的实际用户IDuid_t geteuid(void);
返回值:调用进程的有效用户IDgid_t getgid(void);
返回值:调用进程的实际组IDgid_t getegid(void);
返回值:调用进程的有效组ID
保存的设置用户 ID 是由 exec 函数复制有效用户 ID 而得来的。如果设置了文件的设置用户 ID 位,则 exec 函数会将文件的用户 ID 设置为进程的有效用户 ID。否则,则新进程的有效用户 ID 不会被改变。但是,无论是否设置了文件的设置用户 ID 位,exec 函数都会将进程当前的有效用户 ID 复制到保存的设置用户 ID 中。
可以调用 setuid 函数设置实际用户 ID 和有效用户 ID。与此类似,可以调用 getgid 函数设置实际组 ID 和有效组 ID。
#include <unistd.h>
int setuid(uid_t uid);
int setgid(gid_t gid);
两个函数返回值:若成功则返回0,若出错则返回-1
setuid 函数改变用户 ID 的规则为(setgid 函数改变组 ID 的规则类似),
1. 若进程具有超级用户特权,则 setuid 函数将实际用户 ID、有效用户ID,以及保存的设置用户 ID 设置为 uid。
2. 若进程没有超级用户特权,但是 uid 等于实际用户 ID 或保存的设置用户 ID,则 setuid 函数只将进程有效用户 ID 设置为 uid,不改变实际用户 ID 和保存的设置用户 ID。
3. 如果上面两个条件都不满足,则将 errno 设置为 EPERM,并返回 -1.
POSIX.1 还提供了两个函数 seteuid 和 setegid,
#include <unistd.h>
int seteuid(uid_t uid);
int setegid(gid_t gid);
两个函数返回值:若成功则返回0,若出错则返回-1
这两个函数类似 setuid 和 setgid,不过这两个函数只更改有效用户 ID 和有效组 ID。
(done)
UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念的更多相关文章
- UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数
lienhua342014-10-12 当一个进程正常或者异常终止时,内核就向其父进程发送 SIGCHLD信号.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用的函数(信号处理程序).对于这 ...
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
lienhua342014-10-07 在“进程控制三部曲”中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork ...
- UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲
lienhua342014-10-05 1 进程控制三部曲概述 UNIX 系统提供了 fork.exec.exit 和 wait 等基本的进程控制原语.通过这些进程控制原语,我们即可完成对进程创建.执 ...
- UNIX环境编程学习笔记(24)——信号处理进阶学习之信号集和进程信号屏蔽字
lienhua342014-11-03 1 信号传递过程 信号源为目标进程产生了一个信号,然后由内核来决定是否要将该信号传递给目标进程.从信号产生到传递给目标进程的流程图如图 1 所示, 图 1: 信 ...
- UNIX环境编程学习笔记(23)——信号处理初步学习
lienhua342014-10-29 1 信号的概念 维基百科中关于信号的描述是这样的: 在计算机科学中,信号(英语:Signals)是 Unix.类 Unix 以及其他 POSIX 兼容的操作系统 ...
- UNIX环境编程学习笔记(9)——文件I/O之文件访问权限的屏蔽和更改
lienhua342014-09-10 1 文件访问权限 在文件访问权限和进程访问控制中,我们已经讲述过文件访问权限位,为了方便,我们重新列在下面, 表 1: 文件的 9 个访问权限位 st_mod ...
- UNIX环境编程学习笔记(3)——文件I/O之内核 I/O 数据结构
lienhua342014-08-27 内核使用三种数据结构表示打开的文件,分别是文件描述符表.文件表和 V 节点表. (1) 每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,每 ...
- UNIX环境编程学习笔记(2)——文件I/O之不带缓冲的 I/O
lienhua342014-08-25 1 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符. ...
- UNIX环境编程学习笔记(20)——进程管理之exec 函数族
lienhua342014-10-07 在文档“进程控制三部曲”中,我们提到 fork 函数创建子进程之后,通常都会调用 exec 函数来执行一个新程序.调用 exec 函数之后,该进程就将执行的程序 ...
随机推荐
- JAVA-JSP内置对象之application对象
相关资料:<21天学通Java Web开发> application对象1.application对象用来取得和设置Servlet的相关信息.2.application对象的生命周期是从服 ...
- JAVA实用工具--javamail
在实现javamail之前首先要搭建邮件服务器 James 在进行WEB程序开发的时候需要使用Tomcat服务器,但是Tomcat服务器并不支持邮件的处理操作,所以要想进行邮件的发送,还需要配置一个单 ...
- Android基础——使用Fragment适应不同屏幕和分辨率
最近事情很忙,一个新项目赶着出来,但是很多功能都要重新做,一直在编写代码.Debug.今天因为一个新程序要使用Fragment来做,虽然以前也使用过Fragment,不过没有仔细研究,今天顺道写篇文章 ...
- [转]Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数
oracle的分析函数over 及开窗函数 一:分析函数Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...
- python使用selenium
首先安装 pip install selenium 测试抓取baidu,其中的chromedriver.exe需要自己下载,百度有很多的 import timefrom selenium import ...
- 【Android开源项目分析】自定义圆形头像CircleImageView的使用和源码分析
原文地址: http://blog.csdn.net/zhoubin1992/article/details/47258639 效果
- Java编程的逻辑 (44) - 剖析TreeSet
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- spring boot微服务改造冲突
1.报错: 13:57:49.959 [main] ERROR org.springframework.boot.SpringApplication - Application startup fai ...
- ElasticSearch 深度分页解决方案 {"index":{"number_of_replicas":0}}
常见深度分页方式 from+size es 默认采用的分页方式是 from+ size 的形式,在深度分页的情况下,这种使用方式效率是非常低的,比如 from = 5000, size=10, es ...
- 移动互联网App兼容性测试
我建议大家也可以参考一些针对App监测和统计的网站,都非常有意义,具体如下: 友盟品牌手机排行榜 http://www.umeng.com/ 移动观象台 https://www.talkingd ...