首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FreeBSD上中断无限的“同时”循环

在FreeBSD上中断无限的“同时”循环
EN

Unix & Linux用户
提问于 2017-02-08 16:29:02
回答 1查看 2.6K关注 0票数 0

我有一个基本的FreeBSD系统,只有一个终端。我想每15秒左右监控一次zpool status。通常,在“常规”系统上,我会使用watch -n15,但这里不提供。

我不知道我是否想在一个重要的和可能脆弱的主机上安装新的程序。但如果真的很简单的话,我很乐意这么做,我听说过一种叫做cmdwatch的替代品。

监视程序的简单解决方案是使用while循环,即:

代码语言:javascript
复制
while :; do zpool status && sleep 15; done

这表面上很管用。但是,现在我不能使用Ctrl + C来中断循环,这是一个很大的麻烦。我可以使用Ctrl +Z把循环放在后台,调用ps得到PID,然后kill -9程序。经常杀人不起作用。

所以这还不够好。对于任何不是我的用户来说,系统看起来都是坏的。另一篇文章指出,我要检查返回代码是否大于128,SIGINT应该给130,如下所示

代码语言:javascript
复制
while [ 1 ]; do zpool status; test $? -gt 128 && break; done

如果我只运行sleep 15命令,这是可行的。将更多的命令与;&&链接在一起,就产生了我无法中断循环的旧情况。

我做什么好?

EN

回答 1

Unix & Linux用户

发布于 2017-02-08 16:54:24

你考虑过用陷阱吗?

代码语言:javascript
复制
#! /bin/sh
trap "break" INT
while :
do
    COMMAND && sleep 15
done
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/343496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档