加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

揭示数据和分析领域的10个发展趋势

发布时间:2021-02-20 15:01:22 所属栏目:动态 来源:互联网
导读:您可以想象使用这些命名空间为新的或现有的流程做什么。当它们在同一台计算机上运行时,您几乎可以将它们隔离在一个虚拟机上运行。您可以将多个进程隔离在各自的命名空间中,并在同一主机内核上运行。这比运行多个虚拟机要有效得多。 创建新的命名空间或加入

您可以想象使用这些命名空间为新的或现有的流程做什么。当它们在同一台计算机上运行时,您几乎可以将它们隔离在一个虚拟机上运行。您可以将多个进程隔离在各自的命名空间中,并在同一主机内核上运行。这比运行多个虚拟机要有效得多。

创建新的命名空间或加入现有的命名空间

默认情况下,当您使用 fork() 创建进程时,子进程将继承调用 fork() 的进程的命名空间。如果您希望创建的新进程成为新命名空间的一部分,该怎么办?但 fork() 没有参数,不允许我们在创建子进程之前对其进行控制。然而,您可以使用 clone() 系统调用来施加这种控制,从而可以非常精细地控制它创建的新进程。

有关 clone() 的说明

在 Linux 下,虽然有不同的系统调用,例如 fork(),vfork() 和 clone() 来创建新进程。但是在内部,内核中的 fork() 和 vfork() 只是使用不同的参数调用 clone()。围绕内核源代码(为了更好的说明,我进行了一些编辑)非常容易理解。在文件kernel/fork.c[13] 中,您可以看到以下内容:


 

在以上调用中,unshare 实用程序正在派生一个新进程,调用 unshare() 系统调用以创建一个新的 PID 命名空间,然后在其中执行 /bin/bash。我们还告诉 unshare 实用程序在新进程中挂载 proc 文件系统。这是 ps 实用程序从其获取信息的地方。从 ps 命令的输出中,您确实可以看到该 shell 拥有一个新的 PID 命名空间(PID 为 1),并且由于 ps 是由具有新 PID 命名空间的 shell 启动的,因此它继承了该 Shell 并获得 PID 为 2。作为练习,您可以弄清楚在此容器中运行的 Shell 进程在主机上的 PID 是什么。

命名空间的类型

了解 PID 命名空间后,让我们尝试了解其他命名空间以及它们的含义。命名空间手册页[4]讨论了 8 种不同的命名空间。以下是带有简短说明的各种类型,以及指向相关手册页的链接:


 

命名空间(Namespaces)基础

所有 Linux 计算机在启动时都是 “default” 命名空间的一部分。在计算机上创建的进程也继承默认命名空间。换句话说,因为所有对象也都存在于默认命名空间中,进程可以看到正在运行的其他进程,网络接口,挂载点,名为 IPC 的对象或权限允许的文件。当创建一个进程时,我们可以告诉 Linux 为我们创建一个新的 PID 命名空间,在这种情况下,新进程及其任何后代形成一个新的层次结构或 PID,而新创建的初始进程为 PID 1,就像 Linux 机器上特殊的初始化进程一样。假设使用新的 PID 命名空间创建了一个名为 “new_child” 的进程。当该进程或其后代使用诸如 getpid() 或 getppid() 之类的系统调用时,它们会在新命名空间中看到 PID。例如,对于这两个系统调用,在新创建的 PID 命名空间中的 new_child 将获得 1。而当您从默认命名空间查看 new_child 的 PID 时,当然不会为其分配 1(那是默认命名空间中的 init 了)。

Linux 操作系统提供了在创建进程时或与之关联的正在运行的进程创建新命名空间的方法。所有命名空间,无论其类型如何,都被分配了内部 ID。命名空间是一种内核对象。一个进程只能属于一个命名空间。例如,假设一个进程 new_child 的 PID 命名空间设置为内部 ID 为 0x87654321 的命名空间,它不能属于另一个 PID 命名空间。但是,可能存在其他属于同一 PID 命名空间 0x87654321 的其他进程。同样,new_child 的后代将自动属于相同的 PID 命名空间。命名空间是继承的。

你可以使用 lsns 实用程序列出计算机中的各种命名空间。即使您的计算机上没有运行任何容器,也很可能会看到与各种命名空间相关的其他进程。这表明,命名空间并不仅仅是在容器的上下文中使用。它们可以在任何地方使用。它们提供隔离。它们是一项强大的安全功能。在现代 Linux 系统上,您会看到 init,systemd,几个系统守护程序,Chrome,Slack,当然还有使用各种命名空间的 Docker 容器。让我们看一看我机器上的 lsns 实用程序的输出:



 

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!