在x秒后停止命令而不使用超时

时间:2015-11-29 20:26:40

标签: linux bash kill

我正在尝试执行x秒的命令然后在之后停止它。我想通常你会用timeout命令执行此操作,但是这个程序似乎在我的机器上不可用,所以我仍然试图让它以不同的方式工作。

这是我尝试过的命令之一:

./some_program & sleep 5; kill `pidof some_program`

通常当我使用ctrl + c手动中断some_program时,它会生成结果的csv文件,但上面的命令似乎只是停止它,并且没有创建的csv文件。如果我使用kill -9,它将终止程序,但同样,不会生成任何csv文件。

如何在x秒后自动停止程序并仍然使其生成csv文件? (我已尝试kill -2kill -3kill -15。)

1 个答案:

答案 0 :(得分:0)

要获得与 C-c 相同的效果(假设程序不会更改tty设置以非标准方式处理它),您需要发送SIGINT。此外,避免运行pidof - 当您使用kill时,bash会为您提供%+的最后一个后台作业。

你应该能够

./some_program & sleep 5; kill -INT %+

示范

$ time bash -c 'sleep 15 & sleep 3; kill -INT %+'

real    0m3.005s
user    0m0.001s
sys     0m0.004s