【发布时间】:2026-01-15 06:55:02
【问题描述】:
我正在编写一个 C 程序,其中父进程分叉 n 个子进程。子进程一旦创建就会调用 SIGSTOP 以允许创建其他子进程。创建所有 n 个子进程后的父进程向所有子进程发送 SIGCONT 信号。
所有子进程执行一个无限循环并使用信号量共享一个公共资源。现在我希望每当用户按下 ctrl-c 时,父进程和所有子进程都会一起终止。但是,在终止子进程之前,应该在文件中更新每个子进程使用资源的次数。
例如:
Process 1 - 5 times
Process 2 - 3 times
等等。
在此实施中需要帮助...
【问题讨论】:
-
你有什么?您需要帮助哪些部分?您将需要 SIGINT 的信号处理程序(但可能不需要 SIGCONT)。因此,您应该查看
sigaction()。我假设你的信号量代码已经在工作了? -
重复? *.com/questions/284325/… 包含一个很好的答案。
-
@JonathanLeffler 信号量部分对我来说工作正常。我坚持的是在按 ctrl-c 退出子进程应该首先在文件中更新每个使用资源的次数的部分。此后,孩子和父母相继终止。
-
我尝试过这样的事情......但不知道它是否正确。我使用 signal(SIGINT, handler) 来处理父进程中的 SIGINT,然后将 kill(0,SIGQUIT) 作为处理函数的一部分发送到整个进程组。但是写入文件的问题仍然需要解决
-
@ritz - 发布你已经完成的工作。
标签: c fork parent-child