使用 C (linux) 将进程记录并写入文件

Record and write processes onto a file using C (linux)

有人可以帮我解决这个小问题吗?我正在尝试创建一个 fork 炸弹并记录在奇怪的事情发生之前计算机创建了多少个进程,但我无法弄清楚如何将这些进程写入文本文件。我环顾了互联网,找不到解决我问题的方法,我尝试做不同的事情,但这对我也不起作用。如果你们能帮我解决这个问题,那就太棒了!到目前为止,这是我的代码(远非完美,我知道.. D:)。

    while(1)
    {
        fork(); // Fork bomb
        write(fd, '\n', sizeof(buf));
    }

提前致谢

打开文件进行写入+追加。

每个派生进程都将继承文件描述符。

在每个派生子进程中,将单个空字节写入文件描述符。

当一切崩溃时,文件的大小(以字节为单位)会告诉您启动了多少个进程。

另一个想法是写进程数,而不是写那么多字节

这有点复杂。我写这个答案只是为了完整(和有趣!)。

使用进程作为"master process"。 (最简单的方法是使用启动进程。)每次创建新进程时,都会向主进程发送一个信号(您可以使用 SIGUSR1),因此主进程可以增加其进程计数器。 (请注意,在 every 进程中递增计数器是行不通的,因为它们的内存不共享。)一旦 fork() 失败,另一个信号将发送到 master。一旦所有 children 都失败了(一个 child 只会发出一次失败信号,master 除了进程计数器之外还会有一个失败计数器),master 会将进程计数器写入文件,并杀死其进程组中的所有进程(kill()不仅可以杀死单个进程,还可以杀死一个进程组)。

注意事项:

  • 您可能需要使用 nice() 来避免 children 阻止 master 执行。

  • 为了防止children在所有children被杀死之前再次分叉,你可能需要在终止children之前暂停它们.