Linux----进程组

本文介绍了Linux系统中shell终端和进程组的概念及其交互。在Linux中,用户通常通过shell与系统交互,shell接收命令并执行。当启动一个长时间运行的程序时,shell会创建一个子进程来接管终端。通过setpgid函数,可以将子进程分离成新的会话,但该子进程将失去对终端的控制。这个过程涉及到fork和exec函数族,以及会话和进程组的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ProcessGroup

Linux系统一般都是作为服务器而存在,对于Linux系统而言,图形化界面不过是一个内核之外给“普通用户”增加使用体验感的一个道“道具”而已,这个“道具”和Windows系统一样,对于一个小白而言上手即可使用,只不过Windows的图形界面是内核之内的,而Linux系统的图新界面是内核之外的。由于设计的初衷不同,作为服务器的Linux系统,使用图形化界面是没有任何对服务器性能提升的作用的,所以摒弃图形化界面一个Linux使用者所要秉持的原则
所以很多时候对Linux系统的使用常常是通过一个shell终端进行的,再说的直接一点,一个用户通过一个终端或者Telnet,login一个Linux系统往往是通过一个会话session进行的!当用户登入时,这个会话就开始了。这个时候shell所承担的作用就是,用户在pc端键盘输入指令给终端,终端把这个命令交给shell,shell会执行这个命令,执行完之后会把这个结果显示出来。这个过程周而复始,直到用户logout,这个会话就结束了。(可以想象shell就是一个进程)
然而用户在登入一个Linux系统后的目的却不是仅仅执行几行指令这么简单,用户的目的往往会在终端运行一个可执行的大程序,那么这个时候shell进程就会暂时把终端的使用权交个这个可执行程序,这个可执行程序会被一个由shell进程fork的子进程接管(其中就包含fork与exec函数族),这个子进程此时就获得了终端的使用权,从而进行输入输出的显示操作,当子进程结束后,会把使用权返回给shell进程。(注:这个时候,最开始的进程shell会变为后台进程,子进程变为前台进程。当然如果子进程是一个执行时间很长的程序的话,也可以将此进程作为一个后台挂起的进程,然后重新回到shell上来进行别的指令操作)此时这个子进程和shell进程之前其实是一个进程组,二者共同切换的使用这个终端为用户显示输入输出。这时我们可以将这个子进程分离出来,(使用setcid函数)成为一个新的会话session,但是分离出来的子进程没有终端了!就丧失了对终端的输入输出了!
注意这里面的关系!!!

#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值