首页
学习
活动
专区
圈层
工具
发布

kubernetes pod为什么需要pause容器?

第二,启用PID命名空间,它在每个pod中都作为PID为1进程,并回收僵尸进程。 什么是共享命名空间? 在Linux中,当我们运行一个新的进程时,这个进程会继承父进程的命名空间。...当子进程已经结束运行时,它在进程表中的记录仍然存在,只有当父进程通过使用wait系统调用取回了它的退出码。这个过程就叫做回收僵尸进程。 ?...当进程的父进程在子进程之前死亡时,操作系统将子进程分配给“init”进程或PID 1。例如,init进程“采用”子进程并成为它的父进程。...PID 1的角色,并添加ghost作为nginx的子进程。...它的一个重要功能是作为pod中PID 1的角色,当僵尸被父进程孤立时,通过调用wait 来捕获僵尸进程(参见sigreap)。

3.3K20

详解僵尸进程与孤儿进程

,调用 wait 或 waitpid 系统调用来为子进程回收系统资源(包括进程 id、进程退出状态、进程运行时间)。...3.1 孤儿进程 既然所有进程都是父进程创建的,那就会发生无限回溯的问题,所以必须要有一个最初的进程,来担任所有进程的祖先,这个进程就是 init 进程。...\n"); exit(-1); } exit(0); } 5. docker 中如何避免僵尸进程 5.1 docker 中的僵尸进程 Docker...我们可以将各个 linux 发行版官方提供的镜像作为基础镜像,从而让我们的 docker 中可以模拟整个系统,或者在 docker 中安装 systemd 或者 sysvint 这类初始化系统的进程,但这无疑要消耗比较大的磁盘资源...另一方面,通过 bash 创建出来的进程,无论其执行结果如何,bash 都会以 0 作为返回状态退出,这样一来,如果实际执行的子进程是异常崩溃,我们就没有办法获取到这个进程的返回码了,而 docker

2.4K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux下进程相关知识

    1. ps命令 进程是在你的系统上运行的程序。它们由内核管理,每个进程都有一个与之关联的ID,称为**进程ID(PID)**。这个PID是按照进程创建的顺序分配的。...bash shell的PID是ps l命令的PPID。 当系统启动时,内核创建了一个名为init的进程,它的PID为1。除非系统关闭,否则无法终止init进程。...因此,当一个进程准备终止时,它会用一个叫做终止状态的东西让内核知道它为什么要终止。通常情况下,状态为0表示进程终止成功。然而,这还不足以完全终止一个流程。...为什么有信号?...当进程运行时,信号将被传递。但是,进程具有信号掩码,如果指定的话,它们可以将信号传递设置为阻塞。

    1.8K51

    【云原生技术研究】 从bpftrace看如何利用eBPF实现内核追踪

    它的运行时常驻在内核中,用户可以通过dtrace命令,把D语言编写的追踪脚本,提交到内核中的运行时来执行。...与Kprobes相比,他们的主要区别在于,Tracepoints是内核开发人员已经在内核代码中提前埋好的,这也是为什么称它们为静态探针的原因。...; (2)通过Docker镜像安装,使用如下命令运行一个docker容器,并且执行对应的脚本。...该脚本同样是采用了tracepoint探针,当进入execve ()系统调用时执行该探针。该探针的动作是打印时间、PID和执行命令。 #!...下面这个脚本,使用了kprobe探针,当内核功能tcp_connect() 被调用时,执行脚本中的追踪程序,并且抓取时间、PID、命令以及源目的相关的信息。

    3.1K30

    Tomcat进程意外退出,元凶居然是他...

    这是一个有趣的现象,catalina.sh start方式启动的tomcat会把java进程挂到init(进程id为1)的父进程下,已经与当前test.sh进程脱离了父子关系,也与ssh进程没有关系,为什么关闭...确定了是由signal引起的之后,我的疑惑变成了: 1) 为什么SIGINT (kill -2) 不会让tomcat进程退出?...2) 为什么SIGHUP (kill -1) 会让tomcat进程退出?...当catalina.sh自身进程退出后,java进程的ppid变成了1 花了很多的时间猜测可能是OS层面的原因,后来发现并没有关系。...还是比较好理解的,举例来说,我们先某个前台进程运行时间太长,可以ctrl-z中止一下,然后通过bg %n把这个进程放入后台,同样也可以把一个cmd &方式启动的后台进程,通过fg %n放回前台,然后在ctrl-c

    4.5K10

    Tomcat 进程意外突崩,元凶居然是它...

    这是一个有趣的现象,catalina.sh start方式启动的tomcat会把java进程挂到init(进程id为1)的父进程下,已经与当前test.sh进程脱离了父子关系,也与ssh进程没有关系,为什么关闭...确定了是由signal引起的之后,我的疑惑变成了: 1) 为什么SIGINT (kill -2) 不会让tomcat进程退出?...2) 为什么SIGHUP (kill -1) 会让tomcat进程退出?...当catalina.sh自身进程退出后,java进程的ppid变成了1 花了很多的时间猜测可能是OS层面的原因,后来发现并没有关系。...还是比较好理解的,举例来说,我们先某个前台进程运行时间太长,可以ctrl-z中止一下,然后通过bg %n把这个进程放入后台,同样也可以把一个cmd &方式启动的后台进程,通过fg %n放回前台,然后在ctrl-c

    1.3K10

    探索Linux下进程状态 | 僵尸进程 | 孤儿进程

    当程序运行时,显示的是S状态,S状态是休眠状态 将代码中while循环里面打印的内容去掉,再来查看状态: #include #include...这两个程序刚刚都是运行,为什么第一个代码是S状态(休眠状态)呢? 休眠状态本质上是程序什么都没有做,这叫做休眠状态,但是刚刚一直在打印内容,说是什么都没做,好像有点不对。...休眠状态本质就是进程在等待“资源”就绪 当程序正在运行时,如果ctrl+c,进程被终止,称为可中断睡眠。...S+:意思是进程在前台运行,S是进程在后台运行 当进程处于后台运行时,无法通过ctrl+c终止程序,需要使用指令:kill -9 T/t状态 T状态和t状态我们可以认为这两个状态是一样的,对于一个进程...当父进程结束后,它的子进程的父进程变成1号进程,即操作系统 将父进程是1号进程的进程叫做孤儿进程。 孤儿进程被1号i进程领养,当然要有进程回收喽。

    85110

    Kubernetes Pod 网络精髓:pause 容器详解

    前言 当检查你的 Kubernetes 集群的节点时,在节点上执行 docker ps 命令,你可能会注意到一些被称为“暂停”(pause)的容器,例如: ?...这样我们就不用担心我们的 Pod 的 PID namespace 里会堆满僵尸进程了。这也是为什么 Kubernetes 不随便找个容器(例如:Nginx)作为父容器,然后让用户容器加入的原因了。...当在主机上发送 SIGKILL 或者 SIGSTOP(也就是 docker kill 或者 docker stop)强制终止容器的运行时,其实就是在终止容器内的 init 进程。...通过前文的讨论,我们知道 Pod 内容器共享 PID namespace 是很有意义的,那为什么还要开放这个禁止 PID namesapce 共享的开关呢?...PID 1 了。

    10.4K66

    Linux进程学习【进程状态】

    { cout PID is:" << getpid() << endl; sleep(1); } return 0; } 当前...,当 进程 等待时间过长时,我们可以手动将其关闭,应用卡死后强制关闭也是这个道理 还有一种方式终止进程:kill kill -9 PID 终止进程,当进程在后台运行时(状态不加 +),我们是无法通过...暂停进程 kill -18 PID 恢复进程 我们可以通过 kill -18 PID 使 进程 恢复运行,恢复后的 进程 在后台运行 注意: 进程 在后台运行时,是无法通过 ctrl...+c 指令终止的,只能通过 kill -9 PID 终止 在 gdb 中调试代码时,打断点实际上就是 使 进程 在指定行暂停运行,此时 进程 处于 追踪暂停状态 t ️死亡 X 当进程被终止后,就处于...会被OS领养 ---- 总结 以上就是关于进程学习【进程状态】的全部内容了,我们简单学习了 进程 的相关状态,知道了何为 阻塞、进程 为什么 阻塞 的缘由,同时还见识了 进程 的各种状态,为以后 进程

    1.9K30

    C语言进程(第二章,wait,sleep,waitpid,pthread_mutex_lock,pthread_mutex_unlock)

    //当pid=-1时,说明fork函数没有成功创建新进程,出现异常错误退出程序 printf("error: 创建进程失败 \n"); exit(1); } else...子进程在输出 pid 后休眠了 1 秒钟,然后以退出码2终止。 父进程通过使用 wait() 等待子进程结束,并获取其退出状态码。这里,父进程首先阻塞自己,直到子进程终止。...一旦该子进程终止,它的pid将作为 wait() 的返回值,则父进程回复执行状态并检索子进程所特定的退出状态,最后输出已终止的子进程pid 和其退出状态 (在本例中是2)。...当调用 sleep() 函数时,操作系统会阻止程序的继续执行并暂停程序的运行时间。 在等待所需时间后,函数返回以便程序可以恢复执行。...运行结果: 当该代码运行时,父进程重复调用了五次waitpid()函数来等待每个子进程完成操作,并处理相应的返回状态。 当一个子进程执行完毕后,它退出并返回一个退出状态码给父进程。

    93910

    为什么你的docker容器刚启动就停了

    这个要从linux内核说起 在linux操作系统中,当内核初始化完毕之后,会启动一个init进程,这个进程是整个操作系统的第一个用户进程,所以它的进程ID为1,也就是我们常说的PID1进程,然后所有的用户态进程...,都是这个进程的子进程,所以,整个系统的用户进程,都是由init进程作为根进程的 要了解这个PID1进程,要从以下几个概念了解 进程表项 linux内核程序通过进程表对进程进行管理, 每个进程在进程表中占有一项...当一个进程结束了运行或在半途中终止了运行,那么内核就需要释放该进程所占用的系统资源。这包括进程运行时打开的文件,申请的内存等。...了解了linux的PID1,接着来看下容器中的PID1进程 熟悉docker都知道,docker容器并不是一个完整的linux的操作系统,它也没什么内核初始化过程,更没有像init(1)这样的初始化过程...,我上面说linux中PID1进程为所有用户进程的父进程,但是在容器里面,通过ps命令看到的进程的父进程都是“0”,这又是为什么呢?

    3.9K10

    【Linux 进程状态】—— 从创建到消亡的全生命周期

    答案是肯定的,当函数开始return时,函数的功能已经基本实现,对于fork函数来说,当它开始返回时,子进程已经被创建,此时fork函数会分别给父进程和子进程进行返回,此时fork就会返回两个值,分别作为父进程和子进程...有R+状态我能理解,但是为什么会有S+状态呢??为什么会处于浅度休眠状态?...这是因为我们的程序中有printf函数,涉及到了IO操作,当程序要进行IO操作时,可能会处于浅度休眠状态,因为要占用硬件资源,向显示器打印,这时有可能其他进程正在使用,所以我们的进程就会进入浅度休眠状态...while (1); } return 0; } 通过 fork() 系统调用创建了一个子进程,然后父进程和子进程分别执行不同的代码逻辑: 父进程:打印自身及其父进程的 PID,随后进入一个无限循环...子进程:打印 3 次自身及其父进程的 PID,每次打印间隔 1 秒。当子进程完成 3 次打印后,会自然退出。

    60310

    【Linux】进程(3)状态

    D状态 为什么会有深度休眠状态D?设想一个场景,一个进程将在对磁盘做输出,而要输出的文件非常大,这需要时间,在这期间task_struct只能在内存里面等待,等待磁盘输出完成的信号。...kill -19 进程PID 暂停进程 kill -18 进程PID 恢复进程之前状态 kill - 9 进程PID 干掉进程 用的也是一个简单无限循环代码。...为什么要有这个Z状态?这是因为,所有关于进程的信息都是被保存在task_struct里面的。当一个进程结束后,我们想要知道这个进程结束的如何就必须想办法获取task_struct里面的信息。...(1) 18 { 19 printf("我是父进程,PID:%d\n", getpid()); 20 sleep(1);...系统为什么要领养孤儿进程?这是因为孤儿进程没有了父进程,也就没有对其进行回收的进程。当孤儿进程执行完毕的时候就会变成僵尸进程,会有危害。

    12910
    领券