首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我不能运行超过100个进程

我不能运行超过100个进程
EN

Stack Overflow用户
提问于 2009-08-23 03:59:38
回答 2查看 1.4K关注 0票数 3

我有大量的外壳命令通过授权服务的"AuthorizationExecuteWithPrivileges“调用以根用户/管理员权限执行。问题是,在一段时间(10-15秒,可能是100个shell命令)之后,程序停止响应,并在调试器中显示以下错误:

无法分叉:错误号35

然后,当应用程序运行时,我不能再启动任何应用程序。我研究了这个问题,显然这意味着没有更多的线程可供系统使用。但是,我使用Activity Monitor进行了检查,我的应用程序只使用了4-5个线程。

为了解决这个问题,我认为我需要做的是将shell命令分离到一个单独的线程中(远离主线程)。我以前从来没有使用过线程,我不确定从哪里开始(我找不到全面的例子)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-23 05:02:40

正如路易斯·格巴格已经指出的那样,你的问题与线程无关。我已经相应地编辑了你的标题和标签。

通过授权服务的"AuthorizationExecuteWithPrivileges“调用,以超级用户/管理员权限执行大量

命令。

别干那事。该函数只存在,所以您可以将root:admin所有权和setuid模式位恢复到您希望以root身份运行的工具。

这个想法是,您应该将应该作为root运行的代码分解为与不需要作为root运行的部分完全分开的程序,以便需要root的部分可以拥有它(通过setuid位),而不需要root的部分可以没有它(通过没有setuid)。

Authorization Services Programming Guide中提供了一个代码示例。

问题是,在一段时间(10-15秒,可能是100个shell命令)之后,程序停止响应,并在调试器中显示以下错误:

无法分叉:错误号35

嗯。一次只能运行几百个进程。这是操作系统强制执行的限制。

这是一个软限制,这意味着你可以提高它--但只能达到你不能提高的硬限制。请参阅zsh和limit -h的输出(在zsh中;我不知道其他shell)。

您需要等待进程完成,然后才能运行更多进程。

,然后当应用程序运行时,我不能再启动任何应用程序。

因为您已经在运行允许的尽可能多的进程。X100进程限制是针对每个用户的,而不是针对每个进程的。

我研究了这个问题,显然这意味着系统没有更多的线程可供使用。

不,它不是。

errno错误代码用于很多事情。EAGAIN (35,“资源暂时不可用”)在由启动线程的系统调用设置时可能意味着不再有线程,但当由另一个系统调用或函数设置时并不意味着不再有线程。

您引用的错误消息明确指出它是由fork设置的,这是用于启动新进程的系统调用,而不是新线程。在这种情况下,EAGAIN意味着“您已经在运行尽可能多的进程”。参见the fork manpage

但是,我使用活动监视器检查,我的应用程序只使用了4-5个线程。

看见?

为了解决这个问题,我认为我需要做的是将

命令分离到一个单独的线程中(远离主线程)。

每个线程启动一个进程只会帮助您更快地耗尽进程。

在…之前我从未使用过线程

听起来你还没有,因为你引用的函数启动了一个进程,而不是一个线程。

票数 7
EN

Stack Overflow用户

发布于 2009-08-23 04:12:30

这与线程无关(至少与应用程序中的线程无关)。这是关于系统资源的。这些派生进程中的每个进程至少消耗一个内核线程(可能更多)、一些vnode和许多其他东西。最终,系统将不允许您生成更多进程。

您遇到的第一个限制是管理限制。系统可以支持更多,但可能会导致性能下降和其他问题。您通常可以通过各种机制来解决这些问题,比如sysctls。一般来说,这样做不是一个好主意,除非你有一个特殊的(特殊的)工作负载,你知道它会从特定的调整中受益。

提高这些限制很可能不会解决你的问题。虽然调整这些限制可能会使您的运行时间更长,但为了真正修复它,您需要弄清楚为什么资源没有返回到系统。根据您上面所描述的,我猜测您的派生进程永远不会退出。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1317722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档