进程组与job

进程组 (process group)

  • linux中每个进程都属于一个进程组。

  • 当一个子进程被 fork() 创建出来后,默认和其父进程在一个进程组内。

    int setpgid(pid_t pid, pid_t pgid);   \* Set process group  *\
    

作业 (job)

  • Unix shell使用*作业 (job) *这个概念来描述、记录一条命令行求值所创建的进程,每个shell进程维护着一个 job 相关的数据结构。

  • shell为每一个作业创建一个新进程组。假设当shell对命令求值创建一个进程 A ,shell为 A 创建一个作业。进程 A 可能调用 fork() 创建多个子进程,这几子个进程并不属于shell的某个作业,但他们和作业中 A 属于同一个进程组。由于Ashell fork 创建,所以 A 默认的pgid和shell进程一样,故需shell修改 Apgid ,随后 A 创建的子进程自然也在这个进程组中。

  • 使用 CTRL + Z、CTRL + C 等为整个前台的进程组发送信号,而非只是属于前台作业的进程。

  • 同一时刻只能有一个前台作业,若干个后台作业。若想创建后台作业需在输入的命令最后加一个'&'字符。

  • 使用jobs内置命令查看当前所有作业。按下 ctrl+z 向可以使得前台进程组所有进程挂起。bg <jobid> 命令使一个前台进程组所有进程在后台运行,fg <jobid> 命令使一个前台进程组所有进程前台运行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容