2

我想等待一个分叉的子进程完成执行,虽然我不想无限期地等待,但最多等待给定的时间,然后如果仍在运行则杀死子进程。

Linux 上的wait(2)说:

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

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

4

1 回答 1

2

您可以使用alarm(3)设置一个计时器,该计时器将SIGALRM在到期时发送到您的进程。kill(2)是从信号处理程序中安全调用的函数之一(请参见signal(7)手册页),因此您可以直接从SIGALRM处理程序中终止子进程,阻塞wait(2)或者wait(3)您在主线程上执行的操作将返回。

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

于 2013-08-30T22:07:23.913 回答