如何从 tail -f 返回底层脚本

如何从 tail -f 返回底层脚本

我有一个ksh脚本,我用它来tail -f查看日志文件。

如何终止tail进程并继续执行底层脚本?

我在 AIX 7.1 上运行它。
- - - - - - - - - - - - - - - - - - - - - - -编辑 - - -------------------------------
根据吉尔斯的回答,我在脚本中尝试了这个:

trap 'echo "tail process terminated!"' 2
tail -f mylog.log
trap - 2

现在执行 tail 命令后,我按 CTRL+C,tail 进程被终止,我的脚本继续运行。但新的问题是,当我再次按 CTRL+C 时,我的脚本将不会退出。任何人都可以帮忙吗?

答案1

如果您不在tail脚本中将该命令置于后台,shell 将等待它退出,而这种情况永远不会发生。

如果您还有其他工作要做,之后想要终止该tail命令,您可以

tail -f logfile &
tailpid=$!
...do some other stuff...
kill $tailpid
...carry on...

答案2

的要点tail -f是永远运行直到被明确杀死,所以你必须安排杀死它。

如果有某种逻辑决定何时tail终止进程,请获取进程 IDtail并安排在需要时触发其终止。例如,如果你想在一分钟后杀死它:

tail -f file.log &
tail_pid=$!
sleep 60
kill $tail_pid
do_more_stuff

如果您想tail在用户按Ctrl+时终止但不终止 shell 脚本C陷阱信号情报信号。您需要将陷阱设置为非空字符串(任何非空值都可以,甚至是空格),因为空字符串会导致tail子进程以及调用 shell忽略 SIGINT 。

trap : INT       # set a signal handler for SIGINT that does nothing
tail -f file.log
do_more_stuff    # executed when tail is killed, e.g. by the user pressing Ctrl+C
trap - INT       # reset SIGINT to killing the script

相关内容