zoukankan      html  css  js  c++  java
  • 第9章进程关系总结

    1 进程组与进程组ID

     获取进程组ID

    pid_t getpgrp()
    
    pid_t getpgid(pid_t pid)

     设置进程组ID

    int setpgid(pid_t pid,pid_t pgid)

    2 会话
     一次登录期间产生的所有进程组都属于同一个会话,会话是进程组的集合

     通过setsid可以创建会话,调用setsid的进程不能是进程组的组长进程

     1)该进程将成为新会话首进程

     2)该进程成为新进程组的组长进程

     3)该进程没有控制终端

     为了保证调用setsid函数的进程不是组长进程,一般调用一次fork函数,然后将父进程终止,用子进程调用setsid(该子进程一定不是组长进程)

    pid_t setsid()
    
    pid_t getsid(pid_t pid)

    3 控制终端

     会话可以有控制终端

     如果会话有控制终端,则其包含的进程组中,有一个是前台进程组,其他的是后台进程组

     中断与退出信号只会发送给前台进程组进程 

     终端断开连接,则发送信号给控制进程(会话首进程)

     对于一个在filedes打开的控制终端,可以通过以下函数获取或设置前台进程组

    pid_t tcgetpgrp(int filedes)
    
    int tcsetpgrp(int filedes,pid_t pgrpid)

     也可以获取会话首进程

    pid_t tcgetsid(int filedes)

    4 作业控制

     作业控制允许在一个终端上启动多个作业(进程组),控制哪个作业可以访问终端,哪些作业在后台运行

     后台进程默认不可以从终端读,但是可以向终端写

     如果后台进程试图读终端,将产生SIGTTIN信号暂停后台进程,shell可以通过fg命令将后台进程送入前台运行,同时进程结束暂停继续运行

     

     

  • 相关阅读:
    PSE Access Service
    The JXTA Migration
    JXSE 2.5 : What's Cool #6 PeerGroup Executor and ScheduledExcutor
    JXTA Kitchen
    LookupListener中的resultChanged方法是在EDT中执行么?
    同一台机器启动两个结点时的端口冲突问题
    (转)OpenSSL中对称加密算法的统一接口
    关于“未能加载文件或程序集“System.Core, Version=3.5.0.0
    暗香浮动的夜晚
    java xml序列化与反序列化
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4143174.html
Copyright © 2011-2022 走看看