![如何将SIGALRM传递给在几毫秒内完成执行的程序?](https://linux22.com/image/994639/%E5%A6%82%E4%BD%95%E5%B0%86SIGALRM%E4%BC%A0%E9%80%92%E7%BB%99%E5%9C%A8%E5%87%A0%E6%AF%AB%E7%A7%92%E5%86%85%E5%AE%8C%E6%88%90%E6%89%A7%E8%A1%8C%E7%9A%84%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我有一个 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 $!