我有一个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