目录
1.进程组和会话
- 进程聚集成为进程组,多个进程组聚集成为会话。
- ps ajx //查看 进程组id 和 会话id
- 创建会话 setsid()
pid_t setsid(void);
- 组长进程不能作为新会话的首进程,因此 fork() 后,终止父进程,子进程调用 setsid() 创建会话,以自己的进程pid, 为会话id 和 进程组 id。
2.守护进程
2.1守护进程daemon概念
- Linux后台的一些服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在后台运行。周期性的执行某种任务,或者等待某一事件的发生。 一般采用以d 结尾的命名方式。
2.2创建守护进程
int main(int argc, char *argv[])
{
pid_t pid;
int ret, fd;
pid = fork(); // 创建子进程
if (pid > 0)
exit(0); // 终止父进程
pid = setsid(); // 子进程创建新会话.
if (pid == -1)
sys_err("setsid err");
ret = chdir("/home/itcast/bj_40"); // 改变工作目录
if (ret == -1)
sys_err("chdir err");
umask(0); // 改变文件访问权限掩码,没有屏蔽任何权限
close(STDIN_FILENO);// 关闭标准输入文件描述符
fd = open("/dev/null", O_RDWR); // fd ---> 0
if (fd == -1)
sys_err("open err");
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
while (1); // 模拟守护进程业务
return 0;
}
3.线程
3.1线程的概念
- Linux 系统中,线程 LWP 称之为:轻量级的进程。
- 进程:有独立的进程地址空间, 有独立的 pcb。 —— 最小资源分配单位。
- 线程:有独立的pcb,没有独立的进程地址空间。(与其他线程共享) —— 最小执行单位。
- 一个创建了线程的进程,本身也沦落 为线程。
- LWP 号: cpu 划分时间片依据。 —— 线程 最小执行单位。
- 查看LWP号命令: ps -Lf 进程pid
3.2线程内核三级映射
- 三级映射。—— 解释了,为什么线程没有独立的进程地址空间。
3.3线程共享
- 独享:栈空间(用户栈、内核栈)errnum
- 共享:./text ./ordata ./data ./bss heap堆 ----> 共享全局变量