当我这样做时tail -f filename,如何退出模式而不用Ctrl+c杀死进程?
我想要的是一种正常的退出方式,比如q在top.
我只是对这个问题很好奇,因为我觉得杀死进程并不是退出某些东西的好方法。
dr_*_*dr_ 51
正如评论中所说,Ctrl-C不会终止tail进程,这是通过发送 SIGTERM 或 SIGKILL 信号(臭名昭著的-9...)来完成的;它只是发送一个 SIGINT 告诉tail结束转发模式并退出。
仅供参考,这是一个更好的工具:
less +F filename
Run Code Online (Sandbox Code Playgroud)
在 中less,您可以按Ctrl-C结束前进模式并滚动文件,然后按F再次返回前进模式。
请注意,less +F许多人提倡将其作为tail -f. 有关这两种工具之间的区别和注意事项,请阅读以下答案:“tail -f”比“less +F”更有效吗?
Jos*_*osh 15
我想要的是一种正常的退出方式,比如顶部的 q。
那是 ControlC:)
我只是对这个问题很好奇,因为我觉得杀死进程并不是退出某些东西的好方法。
^C( ControlC) 向进程发送SIGINT,其定义为:
当用户希望中断进程时,SIGINT 信号由其控制终端发送到进程
这正是你想要在这里做的,就是 interrupt tail。没有其他方法可以完成您想要做的事情(“很好地”退出尾巴),而其他答案提供了一种以tail其他方式停止的方法,但它们也好不到哪儿去。
按^C将尝试中断 Linux 中的任务——这是完全正常的,如果该进程处于某些事情的中间并且你不让它完成,那么它只是“不好”,然后是唯一“不好”的一面效果是那个过程中剩下的东西。例如,^C在make命令中间留下部分编译的软件,但这很好:进一步运行make将清理/恢复它停止的地方。
这将起作用并回答您的问题,但不是一个特别令人满意的解决方案。
timeout 15s tail -f /var/log/messages
Run Code Online (Sandbox Code Playgroud)
这将运行命令 15 秒,然后为您杀死它,而无需按 ^C