fork()可能会失败:这很重要

恩,fork()。有些过程引起另一些过程。我想我有一个故事。



叉子可能会失败。你明白吗?确实,您了解吗?这是非常严重的。叉子可能会失败。与malloc相同。并不经常出现,但是当这种情况发生时,您不能只是接受它而忽略它。在这种情况下,您必须执行某些操作。



似乎每个人都知道fork向子进程返回0,并向父进程返回一些正数-子进程的pid。它发出此号码,以后使用。



猜猜当您不检查错误响应时会发生什么?是的,您将“ -1”(前叉错误)视为有效的pid。



这仅仅是开始。当需要发送信号时,真正的痛苦才开始。您可能要关闭子进程。



您正在执行杀死(pid,信号)。例如kill(pid,9)。



当pid为-1时会发生什么?要知道这一点非常重要。真的很重要



... ...

... ...

... ...



在这里我会在从Linux帮助页面杀(2)。



如果pid为-1,则将sig发送到呼叫进程有权发送信号的每个进程,但进程1(init)除外...


看到?杀死pid -1等同于杀死所有其他进程。如果您是根,那么一切都结束了。您和init离开了。其他一切都消失了,消失了,消失了



您是否具有控制流程的代码?是否曾经发现一台机器完全死了,除了getty / login文本控制台(当然,它会重新启动)和进程管理器之外?可能归咎于这种抑菌剂的核心?



也许这不是他的错。最好检查一下您是否没有执行kill(-1)。



Unix有足够的陷阱,可以满足各种口味的陷阱。



All Articles