程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了取消共享--pid / bin / bash-fork无法分配内存大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决取消共享--pid / bin / bash-fork无法分配内存?

开发过程中遇到取消共享--pid / bin / bash-fork无法分配内存的问题如何解决?下面主要结合日常开发的经验,给出你关于取消共享--pid / bin / bash-fork无法分配内存的解决方法建议,希望对你解决取消共享--pid / bin / bash-fork无法分配内存有所启发或帮助; @H_801_2@该错误是由PID 1进程在新名称空间中退出引起的。

@H_801_2@在bash开始运行之后,bash将派生几个新的子流程来执行某些操作。如果在不使用- f的情况下运行取消共享,则bash将具有与当前“取消共享”进程相同的pID。当前的“取消共享”进程调用取消共享系统调用,创建新的pID名称空间,但是当前的“取消共享”进程不在新的pID名称空间中。这是linux内核的预期行为:进程A创建一个新的名称空间,进程A本身不会放入新的名称空间,只有进程A的子进程将被放入新的名称空间。因此,当您运行时:

取消共享-p / bin / bash
@H_801_2@取消共享进程将执行/ bin / bash,并且/ bin / bash派生几个子进程,bash的第一个子进程将成为新名称空间的PID 1,并且该子进程将在完成其工作后退出。因此,新名称空间的PID 1退出。

@H_801_2@PID 1进程具有特殊功能:它应该成为所有孤立进程的父进程。如果根名称空间中的PID 1进程退出,内核将出现恐慌。如果子命名空间中的PID 1进程退出,linux内核将调用disable_pID_alLOCATIOn函数,该函数将清除该命名空间中的PIDNS_HASH_ADDING标志。当linux内核创建新进程时,内核将调用alloc_pID函数在命名空间中分配PID,并且如果未设置PIDNS_HASH_ADDING标志,则alloc_pID函数将返回- ENOMEM错误。这就是为什么出现“无法分配内存”错误的原因。

@H_801_2@您可以使用’-f’选项解决此问题:

取消共享-fp / bin / bash
@H_801_2@如果使用’-f’选项运行unshare,unshare将在创建新的pID名称空间后派生一个新进程。然后在新进程中运行/ bin / bash。新进程将是新pID名称空间的pID 1。然后bash还将派生几个子流程来完成一些工作。由于bash本身是新pID名称空间的pID 1,因此其子进程可以正常退出。

解决方法

@H_801_2@我正在尝试使用linux名称空间。特别是pid名称空间。

@H_801_2@我以为我可以用bash测试一下,但是遇到了这个问题:

unshare -p /bin/bash
bash: fork: CAnnot allocate memory
@H_801_2@从那里运行ls进行了核心转储。退出是唯一的可能。

@H_801_2@为什么这样做呢?

大佬总结

以上是大佬教程为你收集整理的取消共享--pid / bin / bash-fork无法分配内存全部内容,希望文章能够帮你解决取消共享--pid / bin / bash-fork无法分配内存所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。