我怎样才能从外部关闭“less”,而不使我的终端陷入混乱?

我怎样才能从外部关闭“less”,而不使我的终端陷入混乱?

我正在编写一个实用程序,它会自动less作为子命令启动并输出。有时在写入输出时会发生错误,我想自动关闭less并正常显示错误。但是,无论我尝试向进程发送什么信号,它都会忽略它或“不干净地”关闭,即它使我的终端无法使用。(但是,我可以通过按+并(盲目地)写入命令来less修复终端。)CtrlCstty sane

我尝试了所有“常用”信号:SIGINTSIGTERM和。最后一个显然不起作用,但我还是试了一下。我在 的手册页中找不到有关信号的任何SIGQUIT信息。SIGKILLless

可以less从外面干净地退出吗?

答案1

根据作业控制设置,您可能能够先向程序发出一个kill -tstpless然后发出一个kill -9。第一个信号被捕获,less并使其恢复 tty,然后再重新向自身发出信号,这通常会使其在后台暂停。但是,如果 SIGTSTP 的默认处理程序是忽略它,less则将继续并再次将终端设置为原始。

less您可以考虑在单独的终端中运行,例如xterm -e sh -c "less /myfile",然后您就可以kill -9无需清除地执行此操作。

您也可以运行less --quit-on-intr(或-K),然后它将在 SIGINT 上干净地退出,尽管这也会影响您与输出流的正常交互。

否则,只需将其放在stty sane; tput resetkill命令后面即可。

相关内容