博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unix环境高级编程-进程控制
阅读量:4212 次
发布时间:2019-05-26

本文共 1374 字,大约阅读时间需要 4 分钟。

1.进程标识

每个进程都有一个非负整型标识的唯一进程id。进程id可复用。当一个进程终止后,其进程id就成为复用的候选者。查看task_struct结构可以发现,表示进程的结构体中有两个成员pid和tgid,pid是内核自己维护的进程号,因为在Linux中线程是由进程实现的,用户看到的进程号是tgid域,这个是线程组号,和线程组内的领头进程的进程号一致,我们在用户程序中调用getpid()其实返回的是tgid值。

2.系统中的专用进程

  • id为0的进程通常是调度进程(也被称为swapper)。该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程。
  • id为1通常是init进程,在系统自举过程结束时由内核调用。该进程负责在自举内核后启动一个unix系统。init进程绝不会终止,它是一个普通的用户进程,但以

超级用户特权运行。

  • 每个unix系统实现都有它自己的一套提供操作系统服务的内核进程。如有些id为2的进程是page daemon(页守护进程),此进程负责支持虚拟存储器系统的分页操作。

3.查看进程中相关标识符操作

#include 
pid_t getpid(void); 返回值:调用者的进程id,(其实是tgid);pid_t getppid(void); 返回值:调用者的父进程的id;uid_t getuid(void); 返回值:调用进程的实际用户id;uid_t geteuid(void); 返回值:调用进程的有效用户id;uid_t getgid(void); 返回值:调用进程的实际组id;uid_t getugid(void); 返回值:调用进程的有效组id;

4.创建进程(重点)

一个现有进程可以调用fork函数创建一个新的进程

#include<unistd.h>

pid_t fork(void);        //返回值:子进程返回0,父进程返回子进程id;若出错,则返回-1

Linux3.2.0提供了另一种新进程创建函数-clone:它允许调用者控制哪些部分由父进程和子进程共享。

注意:

 子进程是父进程的副本。譬如,子进程获得父进程数据空间、堆和栈的副本父进程和子进程并不共享这些存储空间部分,父进程和子进程共享text area

5.写时复制技术

6.fork与I/O函数之间的交互关系

7.文件共享

  • 父进程的所有打开文件描述符都被复制到子进程中(复制相当于执行了dup函数)
  • 父进程和子进程共享一个文件表项
  • 父进程和子进程共享同一个文件偏移量

fork之后处理文件描述符的常用情况:

  1. 父进程等待子进程完成。在这种情况下,父进程无需对其描述符做任何处理。当子进程终止后,它曾进行过读、写操作的任一共享描述符的文件偏移量已经更新
  2. 父进程和子进程各自执行不同的程序段。在这种情况下,在fork之后,父进程和子进程各自关闭他们不需要使用的文件描述符(互不干扰)。比如(网络服务器)

父子进程的区别:

 1.fork的返回值不同

2.进程id不同,父进程id不同

3.子进程的tms_utime,tms_stime,tms_cutime和tms_ustime的值设置为0

4.子进程不继承父进程设置的文件锁

5.子进程的未处理闹钟被清除

6.子进程的悬而未决信号集设置为空集

你可能感兴趣的文章
USB History Viewing
查看>>
Android 关机流程分析-案例高通平台
查看>>
android restart reason机制
查看>>
linux cpufeq相关知识
查看>>
cpufreq变频子系统
查看>>
怎样做可靠的分布式锁,Redlock 真的可行么?
查看>>
[图文] Seata AT 模式分布式事务源码分析
查看>>
__asm__ __volatile__("":::"memory"),内存屏障(memory barrier)
查看>>
添加系统调用的方法,2.6.35(没有测试)
查看>>
v4l2
查看>>
wubi的错
查看>>
Saving Data in SQL Databases
查看>>
textFields
查看>>
pm 源码分析
查看>>
Sending the User to Another App
查看>>
kmsg_dump
查看>>
Getting a Result from an Activity
查看>>
Allowing Other Apps to Start Your Activity
查看>>
dev/mem
查看>>
pfn_valid 源码分析
查看>>