标签:
进程号(PID):系统标识一个进程的正整数
父进程号(PPID):父进程的进程号
进程组号(PGID):进程组是一个或多个进程的集合。
会话:一个或多个进程组的集合。
控制终端的含义我不是很理解?
函数/命令:
ps aux:查看当前系统所有进程的基本属性
getpid():获取当前进程PID
getppid():获取父进程的PID
__pid_t getpgid (__pid_t __pid):获取指定进程的进程组号,输入为0表示获取当前进程组号
pid_t getpgrp(void):获取当前进程进程组号
int setpgid(pid_t pid, pid_t pgid):将某个进程加入到某个进程组
参数1:待修改进程组号的进程PID,0表示当前进程
参数2:新的进程组号,0表示进程组号与参数1相同
__pid_t getsid (__pid_t __pid):获取指定进程的会话号,0表示调用进程
__pid_t setsid (void):创建新会话。如果调用进程是一个进程组组长,函数返回错误。
pid_t tcgetpgrp(int filedes):filedes是打开的终端,获取与该终端相关联的前台进程组的进程组号
pid_t tcsetpgrp(int filedes, pid_t pgrpid):将控制终端filedes的前台进程组ID设置为pgrpid。pgrpid应该是同一会话中的进程组ID
pid_t tcgetsid(int filedes):获取控制终端会话首进程的会话ID
#include<sdtio.h> #include<unistd.h> #include<fcntl.h> #include<stdlib.h> int main() { int fd; pid_t pid; pid = fork(); if(pid == -1) perror("fork"); else if(pid > 0) { wait(NULL); exit(EXIT_FAILURE); } else { if((fd = open("/dev/tty1",O_RDWR)) == -1) //注意 tty1是在ps 查看进程中能够找到的 换成ps中找不到的会打不开 perror("open"); printf("pid=%d,ppid=%d\n", getpid(), getppid()); //获取进程号 父进程号 printf("sid=%d,tcgetsid=%d\n",getsid(getpid()), tcgetsid(fd)); //获取会话号 终端会话号 printf("tcgetpgrp=%d\n", tcgetpgrp(fd)); //获取前台进程进程组号 printf("pigd=%d\n",getpgid(getpid())); //获取当前进程进程组id } }
可以看到,进程组号,终端的前台进程组号都是当前进程的父进程号。
当前进程的会话号和终端的会话号相同。
标签:
原文地址:http://www.cnblogs.com/dplearning/p/4678175.html