unix环境高级编程-进程控制
1.进程标识每个进程都有一个非负整型标识的唯一进程id。进程id可复用。当一个进程终止后,其进程id就成为复用的候选者。查看task_struct结构可以发现,表示进程的结构体中有两个成员pid和tgid,pid是内核自己维护的进程号,因为在Linux中线程是由进程实现的,用户看到的进程号是tgid域,这个是线程组号,和线程组内的领头进程的进程号一致,我们在用户程序中调用getpid()其实返回的是tgid值。
2.系统中的专用进程
超级用户特权运行。
3.查看进程中相关标识符操作#include <unistd.h> 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函数之间的交互关系
|