循环:启动程序并在超时后终止

循环:启动程序并在超时后终止

出于调试的原因,我想发现偶尔出现的错误。因此,我想在 shell 中编写一个 while 循环

  • 启动程序(如果它会发生段错误 => 这就是我想要的)
  • 在一定超时(例如几秒)后终止程序

这里的问题是 PID 会改变。你能给我提示一下如何执行此操作吗?我使用 zsh,但也欢迎使用其他 shell!

答案1

超时听起来就像您正在寻找的。

man timeout
timeout - run a command with a time limit

答案2

有一段时间没做过这个了,但基本思路是让正在运行的 shell 在开始循环之前将其 PID 发送到一个命名文件,然后使用带有计时器的单独杀手程序读回该文件。这并不“困难”,但魔鬼就在细节中……

答案3

在这里尝试 bash 脚本:

http://www.cyberciti.biz/faq/shell-scripting-run-command-under-alarmclock/

它会生成一个监视进程,该进程知道要运行的子命令的 PID。警告:在此脚本中,要终止的命令必须是脚本的直接子命令。

答案4

#/usr/bin/env zsh
for i in `seq 1 10`; do
    echo "start sleep";
    sleep 30&
    LAST_CHILD=$!
    echo "PID\$!: "$LAST_CHILD;
    echo "wait for kill:"
    sleep 1 && kill -9 $LAST_CHILD;
done

也应该可以与 bash 一起使用,但我仍然需要一些段错误检测,以便循环中止。

相关内容