如何将SIGALRM传递给在几毫秒内完成执行的程序?

如何将SIGALRM传递给在几毫秒内完成执行的程序?

我有一个 C 程序,如果 n 作为参数传递,它会计算前 n 个素数。

$ ./prime 5
2
3
5
7
11

SIGALRM如果我可以给予程序进程,程序的逻辑就可以让我进入所需的功能。

所以基本上我必须输入

kill -14 <PID of prime>

在另一个终端中,当“prime”刚开始执行时,在进入循环查找素数之前。还要注意的是,每次执行程序时,PID 都会发生变化。

我如何将所有这些操作连接起来并在单行命令中执行?

答案1

创建一个简短的 shell 脚本:

#!/bin/sh
./prime 5 &
sleep 0.001
kill -14 $!

您可以尝试调整睡眠命令右侧的值,或者完全删除它。

还要注意,特别是在繁忙的多用户系统中,您无法保证该进程确实会收到信号。

编辑:借用了$!murus 答案的想法

答案2

可以使用特殊变量获取最后一个后台进程的 PID $!。因此:

./prime 5 & kill -ALARM $!

相关内容