【问题标题】:Record and write processes onto a file using C (linux)使用 C (linux) 记录进程并将其写入文件
【发布时间】:2015-02-17 02:12:37
【问题描述】:

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

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

提前致谢

【问题讨论】:

  • 等一下,您想从只写文件中读取吗?这不会很好。
  • 我想写入未读取的文件。我想我搞砸了那个while循环,我会改变它..
  • 就是这样,加上不使用 fork 的返回值,加上不增加计数器来记录分叉的数量。鉴于目标,关闭文件毫无意义。可能阅读 fork() 的手册页应该是答案中给出的建议。
  • 嗯,能否请您解释一下 fork 的返回值?我会再改一次,请检查新的编辑..

标签: c linux fork writetofile


【解决方案1】:

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

每个分叉的进程都会继承文件描述符。

在每个分叉的子进程中,将一个空字节写入文件描述符。

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

【讨论】:

  • 感谢您的帮助,那么它必须是空字节吗?或者是否可以使用计数器实际写入文件中创建的子进程的数量?还有一个空字节,你的意思是'\n'?
  • 随意使用任何你想要的字节。这不是你写的,而是文件的大小告诉你启动了多少进程。在我看来,您似乎非常专注于将一些数字写入文件,以至于您没有看到使用文件大小来确定启动了多少进程的更简单、更简单的方法。在这种情况下,每次启动新进程时,您甚至可以使用随机数生成器来选择 0 到 255 之间的数字,并将该字节(单个字节)附加到文件中。重要的不是你写的内容,而是文件的大小。
【解决方案2】:

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

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

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

注意事项:

  • 您可能需要使用 nice() 来避免子进程阻止主节点执行。

  • 为了防止孩子在所有孩子被杀死之前再次分叉,您可能需要在终止孩子之前暂停孩子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2014-12-07
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多