进程号和相关函数
每个进程都由一个进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。进程号总是唯一的,但进程号可以重用。当一个进程终止后,其进程号就可以再次使用。
进程号(PID):
标识进程的一个非负整型数。
父进程号(PPID):
任何进程( 除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。如,A 进程创建了 B 进程,A 的进程号就是 B 进程的父进程号。
进程组号(PGID):
进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各种信号,关联的进程有一个进程组号(PGID) 。这个过程有点类似于 QQ 群,组相当于 QQ 群,各个进程相当于各个好友,把各个好友都拉入这个 QQ 群里,主要是方便管理,特别是通知某些事时,只要在群里吼一声,所有人都收到,简单粗暴。但是,这个进程组号和 QQ 群号是有点区别的,默认的情况下,当前的进程号会当做当前的进程组号。
getpid函数
#include <sys/types.h> #include <unistd.h> pid_t getpid(void); 功能: 获取本进程号(PID) 参数: 无 返回值: 本进程号
getppid函数
#include <sys/types.h> #include <unistd.h> pid_t getppid(void); 功能: 获取调用此函数的进程的父进程号(PPID) 参数: 无 返回值: 调用此函数的进程的父进程号(PPID)
getpgid函数
#include <sys/types.h> #include <unistd.h> pid_t getpgid(pid_t pid); 功能: 获取进程组号(PGID) 参数: pid:进程号 返回值: 参数为 0 时返回当前进程组号,否则返回参数指定的进程的进程组号
示例:
int main() { pid_t pid, ppid, pgid; pid = getpid(); printf("pid = %d\n", pid); ppid = getppid(); printf("ppid = %d\n", ppid); pgid = getpgid(pid); printf("pgid = %d\n", pgid); return 0; }
进程的创建
系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。
#include <sys/types.h> #include <unistd.h> pid_t fork(void); 功能: 用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。 参数: 无 返回值: 成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为整型。 失败:返回-1。 失败的两个主要原因是: 1)当前的进程数已经达到了系统规定的上限,这时 e