在特定时间之后杀死主要的所有过程

时间:2013-10-08 08:00:15

标签: c linux pthreads

以下是我的查询。我对粗体文字有疑问。 “你将编写一个程序,它使用多个进程来计算一组(小)正整数的总和。 这个作业有两种类型的过程: 一世)。一组“从属”进程:每个从属进程从其argv获取两个小整数,计算其总和并使用退出系统调用返回结果。因此,为每个总和创建一个从属进程。 II)“主”过程:该过程负责创建从属过程并协调计算。请注意,所有计算都是由“从”进程完成的。所有数字都在命令行argv中提供。 主进程还会在计算开始时将计时器设置为3秒。如果此时计算尚未完成,则主进程将终止所有从属进程,然后退出。在这种情况下,您应该打印相应的消息。请注意,主进程可能必须创建多组从属进程。例如,如果要添加8个数字,则主进程将首先创建4个从属并从中获取结果。此时有4个数字,它创建2。 奴隶。最后创建一个从站来计算总和。为简化起见,如果要添加的整数数为奇数,则主数据会在数字列表中添加0。这可能发生在计算过程中的任何步骤。主进程的代码应单独编译,其可执行代码应称为master。从属进程的可执行代码应该称为slave。因此,要计算数字1到7的总和,命令行将如下所示 大师1 2 3 4 5 6 7 由于结果是通过退出系统调用传递的,因此请保持数字较小(单个数字)。每个从属进程都会打印其进程ID,操作数和总和。每次主机从从机获得结果时,它都会打印从机的pid和部分和。“

3 个答案:

答案 0 :(得分:2)

系统会要求您使用进程。这意味着您需要为每个需要的工人fork。还

  

主进程还在计算开始时将计时器设置为3秒。如果此时计算尚未完成,则主进程将终止所有从属进程,然后退出。

最好设置alarm,它会向您发送信号SIGALARM,当收到信号时,您会在特定进程ID上使用kill(您可以从{{{{}}获取它们1}})。如果你的工人完成了,你的主要过程和警报也不会触发。

如果您不熟悉多进程编程,那么这是一项复杂的任务。现在只需尝试创建一些进程并在例如3秒。如果您遇到更多问题,请发布您的代码并提出具体问题。

答案 1 :(得分:0)

  1. 创建线程时,请存储其标识符。
  2. main()中创建帖子后,暂停使用例如sleep(3)或其他什么。
  3. 循环存储的线程ID:s,调用pthread_cancel()来终止它们。杀死已经终止的线程将导致此调用失败,但这很好。

答案 2 :(得分:0)

不确定我的问题是否正确。您可能希望为执行计算的每个工作线程启动一个辅助线程。将工作线程的tid传递给其helper线程,让helper线程休眠3秒钟,然后检查工作线程是否已退出,如果不是,则将其杀死。 或者,如果您有专用的计时器模块/任务,则可以为每个工作线程启动一个计时器。