出于调试的原因,我想发现偶尔出现的错误。因此,我想在 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 一起使用,但我仍然需要一些段错误检测,以便循环中止。