如何在不使用“Ctrl+c”的情况下退出“tail -f”模式?

如何在不使用“Ctrl+c”的情况下退出“tail -f”模式?

当我这样做时tail -f filename,如何退出模式而不使用Ctrl+c杀死进程?

我想要的是一种正常的退出方式,q就像top.

我只是对这个问题感到好奇,因为我觉得杀死进程并不是退出某些东西的好方法。

答案1

正如评论中所说,Ctrl-C不会杀死tail进程,这是通过发送 SIGTERM 或 SIGKILL 信号来完成的(臭名昭著的-9......);它只是发送一个 SIGINT,告知tail结束转发模式并退出。

仅供参考,这是一个更好的工具:

less +F filename

在 中less,您可以按Ctrl-C结束快进模式并滚动浏览文件,然后按F再次返回快进模式。

注意less +F被许多人提倡作为更好的替代品tail -f。有关这两种工具之间的差异和注意事项,请阅读以下答案:`tail -f` 比 `less +F` 更高效吗?

答案2

我想要的是一种正常的退出方式,比如顶部的 q 。

那是ControlC:)

我只是对这个问题感到好奇,因为我觉得杀死进程并不是退出某些东西的好方法。

^C( ControlC) 发送信号情报到该过程,其定义为:

当用户希望中断进程时,SIGINT 信号由进程的控制终端发送到进程

这正是您想要在这里做的,即中断tail。没有其他方法可以完成您想要做的事情(“很好地”退出尾部),虽然其他答案提供了tail以其他方式停止的方法,但它们也好不到哪儿去。

^C会尝试中断 Linux 中的任务——这是完全正常的,只有当该进程正在执行某件事并且您不让它完成时,这才是“不好”,然后是唯一“不好”的一面效果是这个过程中剩下的东西。举个例子,^C在命令的中间make留下了部分编译的软件,但这很好:进一步运行make将清理它/从它停止的地方恢复。

答案3

tail -f文件名,如何退出模式而不使用Ctrl c杀死进程

你不能那样做。也许你想跑步tail -f somefile | less

Ctrl c由 tty 子系统(以及您的 shell)解释并发送信号(SIGINT请参阅信号(7)私人有限公司(7)...)。看tty 揭秘

答案4

假设你有一个函数

function prll(){
..... 
pkill -9 -x tail
}

假设你沿着你的函数运行尾部

tail -n 1 -f file | 
pv -l > /dev/null | 
prll file

echo !!done!!

结论,答案是:

pkill -9 -x tail

相关内容