有人可以帮我解决这个小问题吗?我正在尝试创建一个fork炸弹并记录计算机在发生奇怪事情之前创建的进程数,但我无法弄清楚如何将进程写入文本文件。我环顾网络,无法找到问题的解决方案,我尝试做了不同的事情,但这也不适用于我。如果你们能帮助我解决这个问题,那就太棒了!到目前为止,这是我的代码(远非完美,我知道...... D :)。
while(1)
{
fork(); // Fork bomb
write(fd, '\n', sizeof(buf));
}
提前致谢
答案 0 :(得分:1)
打开文件进行写入+追加。
每个分叉进程都将继承文件描述符。
在每个分叉子进程中,将单个空字节写入文件描述符。
当一切崩溃时,文件的大小(以字节为单位)将告诉您启动了多少进程。
答案 1 :(得分:1)
这有点复杂。我写这个答案只是为了完整(和有趣!)。
将流程用作“主流程”。 (最简单的方法是使用启动过程。)每次创建一个新进程时,一个信号(您可以使用SIGUSR1)将被发送到主进程,因此主进程可以递增其进程计数器。 (请注意,在每个进程中递增计数器将不起作用,因为它们的内存未被共享。)一旦fork()失败,另一个信号将被发送到主服务器。一旦所有孩子都失败了(一个孩子只会发出一次失败信号并且主人除了进程计数器之外还有一个失败计数器),主人会将进程计数器写入文件,并杀死其进程组中的所有进程( kill()不仅可以杀死单个进程,还可以杀死进程组。
注意事项:
您可能需要使用nice()来避免子节点阻止主节点执行。
为了防止孩子在所有孩子被杀之前再次分叉,你可能需要在终止孩子之前暂停他们。