2013-08-30 35 views
1

我想等待分叉的子进程完成执行,但我不想无限期地等待,但是在给定时间内最多为,如果仍在运行,则会终止子进程如何等待孩子进程完成时限?

在Linux上wait(2)说:

否则他们阻止,直到孩子改变状态或信号处理程序中断调用(假设系统调用不会自动使用的sigaction的SA_RESTART标志重新启动(2)) 。

有人能告诉我一个例子,我应该如何设置一个信号中断一定时间后等待,然后继续执行

+0

一种选择是产生第二个计时器子进程,它将结束并因此在计时器之后改变状态。然后原始孩子或计时器孩子可以结束父母的等待状态。 – abiessu

+0

你过得如何准确?整秒确定,还是需要分秒? –

+0

等待时间通常应该是0.1 - 1秒。 –

回答

2

您可以使用alarm(3)设置一个计时器,该计时器在到期时将SIGALRM发送给您的进程。 kill(2)是它的安全,从信号处理(见signal(7) man page)调用的功能之一,所以你可以直接从SIGALRM处理器杀子进程和阻塞wait(2)wait(3)你正在做的主线程将返回上。

如果您需要更高的分辨率,您可以使用ualarm(3)来代替。