码迷,mamicode.com
首页 > 系统相关 > 详细

【linux高级程序设计】(第八章)进程管理与程序开发

时间:2015-07-26 18:44:10      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

概念:

进程号(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
    }
}

技术分享

可以看到,进程组号,终端的前台进程组号都是当前进程的父进程号。

当前进程的会话号和终端的会话号相同。

【linux高级程序设计】(第八章)进程管理与程序开发

标签:

原文地址:http://www.cnblogs.com/dplearning/p/4678175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!