我正在编写一个实用程序,它会自动less
作为子命令启动并输出。有时在写入输出时会发生错误,我想自动关闭less
并正常显示错误。但是,无论我尝试向进程发送什么信号,它都会忽略它或“不干净地”关闭,即它使我的终端无法使用。(但是,我可以通过按+并(盲目地)写入命令来less
修复终端。)CtrlCstty sane
我尝试了所有“常用”信号:SIGINT
、SIGTERM
和。最后一个显然不起作用,但我还是试了一下。我在 的手册页中找不到有关信号的任何SIGQUIT
信息。SIGKILL
less
可以less
从外面干净地退出吗?
答案1
根据作业控制设置,您可能能够先向程序发出一个kill -tstp
,less
然后发出一个kill -9
。第一个信号被捕获,less
并使其恢复 tty,然后再重新向自身发出信号,这通常会使其在后台暂停。但是,如果 SIGTSTP 的默认处理程序是忽略它,less
则将继续并再次将终端设置为原始。
less
您可以考虑在单独的终端中运行,例如xterm -e sh -c "less /myfile"
,然后您就可以kill -9
无需清除地执行此操作。
您也可以运行less --quit-on-intr
(或-K
),然后它将在 SIGINT 上干净地退出,尽管这也会影响您与输出流的正常交互。
否则,只需将其放在stty sane; tput reset
kill命令后面即可。