在范围内使用管道命令终止无限循环

时间:2011-05-05 11:43:33

标签: bash unix

我有一个非常简单的unix bash脚本,用于每秒执行一次命令。它具有以下形式:

while : ; do
  cat /proc/`pidof iBrowser.bin`/smaps | awk -f ./myawkscript.awk >> $DIRPATH
  sleep 1
done

脚本运行正常,但不会停止!如果我在脚本运行时点击ctrl-C,则进程不会停止,我收到以下错误:

  

cat:无法打开'/ proc // smaps':没有这样的文件或目录

有谁知道如何避免这种情况?

2 个答案:

答案 0 :(得分:3)

您应该考虑陷阱功能。请参阅thisthis

要捕获ctrl-c,您需要定义一个处理程序,例如:

ctrl_c ()
{
    # Handler for Control + C Trap
    echo ""
    echo "Control + C Caught..."
    exit
}

然后声明您希望使用该处理程序捕获它:

trap ctrl_c SIGINT

另外...

您可以通过附加&amp ;,例如

在后台运行脚本
$ ./your_script.sh &

在[方括号]中为您提供职位ID:

$ ./your_script.sh &
[1] 5183

(在这种情况下为1)。完成后,您可以使用

终止该过程
$ kill %1

注意百分号表示您正在引用作业而不是进程ID

答案 1 :(得分:1)

awk -f ./myawkscript.awk /proc/`pidof iBrowser.bin`/smaps >> $DIRPATH \
  || exit 1
如果awk调用失败,

将退出脚本,这在pidof由于错误路径而失败时发生。我冒昧地删除了你的UUOC