当我这样做时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
答案4
假设你有一个函数
function prll(){
.....
pkill -9 -x tail
}
假设你沿着你的函数运行尾部
tail -n 1 -f file |
pv -l > /dev/null |
prll file
echo !!done!!
结论,答案是:
pkill -9 -x tail