1、 进程基本属性
1)、进程号(PID)
_pid_t getpid(void) 获得当前进程的进程号(PID)
2)、父进程号(PPID)
_pid_t getppid(void) 获得当前进程的父进程号(PPID)
3)、进程组号(PGID)
_pid_t getpgid(_pid_t _pid) 获得指定进程的进程组号,如果为0表示获取当前进程组号(PGID),否则为指定进程的PGID。
4)、会话(session)
_pid_t getsid(_pid_t _pid) 获取某个进程的会话号(SID)
_pid_t setsid(void ) 创建新会话
2、 进程管理与控制
1) 创建进程
_pid_t fork(void) //创建进程,在父进程中将返回子进程的PID,在子进程将返回0。
fork 函数创建子进程后,子进程将复制父进程的数据雄姿英段、BBS段、代码段、堆空间、栈空间和文件描述符,而对于文件描述符关联的内核文件表项,则采用共享的方式。如父子进程对于局部变量(即栈空间)执行复制操作,而对于文件描述符的文件表项信息(文件的读写位置)则是共享使用的。
_pid_t vfork(void) //创建新进程时无需完全复制父进程的地址空间。
fork()与vfork()的区别:
fork() 函数是拷贝一个父进程的副本,从而拥有自己独立的代码段等,即成为一个独立的实体;而vfork()是共享父进程的代码以及数据段。
2)、在进程在运行新代码
用fork()函数创建子进程后,可以调用exec系统函数,在当前子进程中运行新程序。
3)、等待进程结束
A、wait()等待子进程结束:调用wait()函数的父进程将等待该进程的任意一个子进程结束后才继续执行。
B、waitpid()等待子进程结束,等待指定子进程结束。
4)、退出进程
Exit与return的区别:
(A)、return退出当前函数主体,exit()函数退出当前进程,因此,在main函数里面return(0)与exit(0)完成一样的功能
(B)、return仅仅从子函数中返回,而子进程用exit()退出,调用exit()时要调用一段终止处理程序,然后关闭所有IO流。
_exit()不调用任何注册函数退出进程,不会处理标准IO缓冲区。
5)、守候进程:在后台运行一种特殊进程,脱离于终端,周期性地执行某种任务或等待处理某些发行的事件,linux的大多数服务器就是用守护进程实现的,如Internet服务器inetd。
孤儿进程:因父进程先退出而导致一个子进程被init进程收养的进程。
僵死进程:已经退出但还没有回收资源的进程。