首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何退出inotifywait

如何退出inotifywait
EN

Stack Overflow用户
提问于 2014-05-18 14:08:24
回答 2查看 2.2K关注 0票数 2

我希望监视给定的目录,直到某个条件出现为止。

代码语言:javascript
复制
ARCHIVE_PATH=$(inotifywait -m -r -q -e close_write -e moved_to --format '%w%f' /test | while read FILE; do
  # ... Code ...
  if [ $CONDITION ]; then
    echo "$VALUE"
    break
  fi
done)

现在,不管我是使用break还是exit 0,while循环都将继续。那么,退出循环并将输出传递给变量的最佳方法是什么?

编辑

break替换kill -2 $$似乎只会触发一个继续。更糟糕的是--有时候,休息会很好--但很少。

EN

回答 2

Stack Overflow用户

发布于 2015-07-07 09:00:51

试一试:kill -2 -$$kill -SIGINT -$$

-$$中的减号向组中的所有进程发送信号。$$是当前进程。因此,-$$应该意味着:将此信号发送到当前进程组中的所有进程。

这个手册页解释了更多信息:http://linux.die.net/man/1/kill

答案来自于:https://bbs.archlinux.org/viewtopic.php?id=186989

票数 1
EN

Stack Overflow用户

发布于 2014-05-19 18:40:28

我现在通过发出信号来做到这一点:

代码语言:javascript
复制
trap "exit 0" 10

ARCHIVE_PATH=$(inotifywait -m -r -q -e close_write -e moved_to --format '%w%f' /test | while read FILE; do
  # ... Code ...
  if [ $CONDITION ]; then
    echo "$VALUE"
    kill 10 $$
  fi
done)

似乎shell不允许从子shell发送SIGINT,因此我不得不发送另一个信号(SIGUSR1)并捕获它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23722795

复制
相关文章

相似问题

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