浅谈Linux进程关系

本文介绍了Linux中进程组和会话的概念,包括进程组的领导进程、PGID和信号传播,以及会话的领导进程、SID、工作控制和控制终端的交互。这些机制帮助用户更有效地管理进程和资源,尤其在无图形界面时代的重要性。

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

转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习知识的网站

Linux的进程相互之间有一定的关系。比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构。我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程。

进程组 (process group)

每个进程都会属于一个进程组(process group),每个进程组中可以包含多个进程。进程组会有一个进程组领导进程 (process group leader),领导进程的PID (PID见Linux进程基础)成为进程组的ID (process group ID, PGID),以识别进程组。

$ps -o pid,pgid,ppid,comm | cat

PID PGID PPID COMMAND17763 17763 17751 bash18534 18534 17763 ps18535 18534 17763 cat

PID为进程自身的ID,PGID为进程所在的进程组的ID, PPID为进程的父进程ID。从上面的结果,我们可以推测出如下关系:

图中箭头表示父进程通过fork和exec机制产生子进程。ps和cat都是bash的子进程。进程组的领导进程的PID成为进程组ID。领导进程可以先终结。此时进程组依然存在,并持有相同的PGID,直到进程组中最后一个进程终结。

我们将一些进程归为进程组的一个重要原因是我们可以将信号发送给一个进程组。进程组中的所有进程都会收到该信号。我们会在下一部分深入讨论这一点。

会话 (session)

更进一步,在shell支持工作控制(job control)的前提下,多个进程组还可以构成一个会话 (session)。bash(Bourne-Again shell)支持工作控制,而sh(Bourne shell)并不支持。

会话是由其中的进程建立的,该进程叫做会话的领导进程(session leader)。会话领导进程的PID成为识别会话的SID(session ID)。会话中的每个进程组称为一个工作(job)。会话可以有一个进程组成为会话的前台工作(foreground),而其他的进程组是后台工作(background)。每个会话可以连接一个控制终端(control terminal)。当控制终端有输入输出时,都传递给该会话的前台进程组。由终端产生的信号,比如CTRL+Z, CTRL+\,会传递到前台进程组。

会话的意义在于将多个工作囊括在一个终端,并取其中的一个工作作为前台,来直接接收该终端的输入输出以及终端信号。 其他工作在后台运行。

一个命令可以通过在末尾加上&方式让它在后台运行:

$ping localhost > log &

此时终端显示:

[1] 10141

括号中的1表示工作号,而10141为PGID

我们通过如下方式查询更加详细的信息:

$ps -o pid,pgid,ppid,sid,tty,comm

(tty表示控制终端)

信号可以通过kill

$kill -SIGTERM -10141

或者

$kill -SIGTERM %1

的方式来发送给工作组。上面的两个命令,一个是发送给PGID(通过在PGID前面加-来表示是一个PGID而不是PID),一个是发送给工作1(%1),两者等价。

一个工作可以通过$fg从后台工作变为前台工作:

$cat > log &

$fg %1

当我们运行第一个命令后,由于工作在后台,我们无法对命令进行输入,直到我们将工作带入前台,才能向cat命令输入。在输入完成后,按下CTRL+D来通知shell输入结束。

进程组(工作)的概念较为简单易懂。而会话主要是针对一个终端建立的。当我们打开多个终端窗口时,实际上就创建了多个终端会话。每个会话都会有自己的前台工作和后台工作。这样,我们就为进程增加了管理和运行的层次。在没有图形化界面的时代,会话允许用户通过shell进行多层次的进程发起和管理。比如说,我可以通过shell发起多个后台工作,而此时标准输入输出并不被占据,我依然可以继续其它的工作。如今,图形化界面可以帮助我们解决这一需求,但工作组和会话机制依然在Linux的许多地方应用。

### Linux 离线环境下 Ollama 的安装与使用 #### 安装准备 为了在Linux离线环境中顺利部署Ollama,需提前在外网连接的机器上准备好必要的文件。这些文件包括但不限于`ollama-linux-${ARCH}.tgz`以及`install_ollama.sh`等必需组件[^2]。 #### 修改安装脚本适应离线环境 由于目标环境处于断网状态,在原本依赖于在线资源获取的方式不再适用的情况下,应当调整原版安装脚本内的curl或其他下载指令,使之能够读取事先已转移至本地存储介质上的对应版本软件包。具体而言就是更改URL地址为实际存放位置的绝对路径或者相对路径。 #### 执行定制化后的安装过程 当上述准备工作完成后,则可以在目标Linux服务器上面运行经过编辑过的shell script来进行最终的产品落地工作;此阶段可能涉及到解压tarball档案、设置权限等一系列常规操作步骤。 #### 启动服务验证成果 考虑到并非所有的Linux发行版都会预设启用systemd作为初始化管理器,对于那些采用其他机制比如sysvinit的地方来说,就需要按照官方文档指导或是社区经验分享里提到的方法去激活OLLAMA的服务进程了——这一步骤可以通过直接调用可执行程序实现,也可以编写相应的service unit file来达成目的。 #### 数据迁移确保一致性 鉴于不同操作系统之间可能存在差异化的用户家目录结构设计,所以从MACOS平台迁移到LINUX时要注意源端`.ollama`文件夹内所含有的各类配置项能否被正确识别解析,并且要特别留意目标路径应设定为`/usr/share/ollama/.ollama/`而非个人用户的home下[^1][^3]。 ```bash cp -r ~/.ollama /usr/share/ollama/ ``` #### 验证模型可用性 最后也是至关重要的一环便是检验整个流程下来是否达到了预期效果,即检查指定端口号处是否有活跃监听活动存在(通常是127.0.0.1:11434),以此证明API接口已经正常对外开放访问权限给客户端应用程序调用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值