Ronan Blog

罗华东的博客 | 向前每多走一步,热爱和勇气就会多一分。

守护进程

2024-10-28 2 min read Linux Ronan

守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。

1. 进程组

多个进程的集合就是进程组, 这个组中必须有一个组长, 组长就是进程组中的第一个进程,组长以外的都是普通的成员,每个进程组都有一个唯一的组ID,进程组的ID和组长的PID是一样的。

进程组中的成员是可以转移的,如果当前进程组中的成员被转移到了其他的组,或者进制中的所有进程都退出了,那么这个进程组也就不存在了。如果进程组中组长死了, 但是当前进程组中有其他进程,这个进程组还是继续存在的。下面介绍几个常用的进程组函数:

得到当前进程所在的进程组的组ID

pid_t getpgrp(void);

获取指定的进程所在的进程组的组ID,参数 pid 就是指定的进程

pid_t getpgid(pid_t pid);

将某个进程移动到其他进程组中或者创建新的进程组

int setpgid(pid_t pid, pid_t pgid);
  • 参数:
    • pid: 某个进程的进程ID
    • pgid: 某个进程组的组ID
      • 如果pgid对应的进程组存在,pid对应的进程会移动到这个组中, pid != pgid
      • 如果pgid对应的进程组不存在,会创建一个新的进程组, 因此要求 pid == pgid, 当前进程就是组长了
    • 返回值:函数调用成功返回0,失败返回-1

2. 会话

会话(session)是由一个或多个进程组组成的,一个会话可以对应一个控制终端, 也可以没有。一个普通的进程可以调用 setsid() 函数使自己成为新 session 的领头进程(会长),并且这个 session 领头进程还会被放入到一个新的进程组中。先来看一下 setsid() 函数的原型:

#include <unistd.h>

// 获取某个进程所属的会话ID
pid_t getsid(pid_t pid);

// 将某个进程变成会话 =>> 得到一个守护进程
// 使用哪个进程调用这个函数, 这个进程就会变成一个会话
pid_t setsid(void);

使用这个函数的注意事项:

1.调用这个函数的进程不能是组长进程, 如果是该函数调用失败,如果保证这个函数能调用成功呢? - 先fork()创建子进程, 终止父进程, 让子进程调用这个函数 2.如果调用这个函数的进程不是进程组长, 会话创建成功 - 这个进程会变成当前会话中的第一个进程,同时也会变成新的进程组的组长 - 该函数调用成功之后, 当前进程就脱离了控制终端,因此不会阻塞终端

Continue reading

「各种摸不着头脑」意外修改PATH(环境变量)

2024-09-03 1 min read Linux Ronan

1. 检查sudo是否已经安装

确保 sudo 已经正确地安装在你的系统中。你可以通过运行 which sudo 来检查它的路径。这应该会出现以下内容

❯ which sudo
/usr/bin/sudo

如果它没有返回任何内容,那么你需要安装 sudo。在大多数 Linux 发行版上,你可以使用包管理器来安装 sudo。例如,在 Ubuntu 上,你可以使用以下命令安装:

sudo apt-get install sudo

在其他发行版上,你可能需要使用不同的命令来安装 sudo

2.手动指定sudo命令的路径

如果你知道 sudo 命令的确切路径,你可以在使用时直接指定它的路径。例如:

/usr/bin/sudo /usr/bin/vim .bashrc

修复PATH环境变量:更彻底的解决方法是修复 PATH 环境变量,使得系统能够找到 sudo 命令。你可以编辑你的 .bashrc 文件,将正确的路径添加到 PATH 环境变量中。你可以使用下面的命令来编辑 .bashrc 文件:

export PATH=$PATH:/usr/bin

然后保存文件并重新启动终端,或者运行 source ~/.bashrc 来使修改生效。

3. 重启系统(针对一些Linux系统,macOS通常不需要)

在修改了环境变量之后,可能需要重启系统才能使其生效。

软链接的使用,以 python 举例

2024-09-02 1 min read Linux Ronan

在 macOS 上创建和使用软链接(symbolic link)的操作非常实用,特别是在管理不同版本的 Python 时。以下是一些关于创建和使用软链接的方法,以 pythonpython3 为例。

1. 什么是软链接(Symbolic Link)?

软链接是一种特殊的文件,指向另一个文件或目录。它类似于 Windows 系统中的快捷方式。软链接允许你使用不同的名称来访问相同的文件或目录。

2. 创建软链接

使用 ln -s 命令创建软链接。以下是几个例子:

示例 1: 将 python 指向 python3

假设你的 python3 可执行文件位于 /usr/local/bin/python3,你想让 python 命令指向 python3

sudo ln -sf /usr/local/bin/python3 /usr/local/bin/python
  • -s 表示创建软链接。
  • -f 表示如果目标文件已存在,强制覆盖。

示例 2: 为自定义路径创建软链接

如果你安装了一个自定义版本的 Python,例如在 /opt/python3.9/bin/python3.9,你想创建一个软链接 python3 来指向它:

sudo ln -s /opt/python3.9/bin/python3.9 /usr/local/bin/python3

这会让 /usr/local/bin/python3 指向你自定义路径下的 Python 3.9。

3. 验证软链接

创建软链接后,可以使用 ls -l 命令来验证:

ls -l /usr/local/bin/python
ls -l /usr/local/bin/python3

输出结果应该类似于:

Continue reading
Older posts