我不知道这是否属于SO(因为它是一个编码错误),但我想你们会更了解所用软件的精妙之处(因此甚至可以考虑U&L)。
这是最小的代码脚本(请参阅完整脚本的编辑,这是我这样做的一个原因);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
它试图做的是在后台运行服务器,该服务器输出到日志文件。
然后我follow
使用该日志文件less +F
。这样做时,要退出此窗口,必须先按ctrl+,c然后才能按Q。
会发生什么事,当我ctrl+ c内部less
命令(以停止tailing
),它以某种方式杀死开始与服务器nohup
在顶部!没有其他影响。我可以shift+ f重新开始跟踪日志(由于服务器被杀死,因此没有任何新信息),如果我命中Q了该脚本,其余脚本将正常执行。
你知道为什么会这样吗?如何避免它/我应该使用的其他东西?
PS
服务器程序可能正在侦听^C
,这可能是问题所在;有什么我可以阻止的吗?就像,当我{SERVERCOMMAND}
独自(以阻塞方式)运行时,我可以按ctrl+ c,但不会立即杀死它;它打印Received ^C signal, shutting down
(然后杀死自己)。这是我^C
进入时发生的情况less
(将最终结果Received ^C signal, shutting down
写入日志)。
PPS
我一直在尝试许多事情(无济于事);
尝试通过更改从脚本断开标准输入
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &
使用
stty intr ^G
来代替中断命令,但是ctrl+ g确实^C
做了任何事情(因此这可能是我的终端仿真器的问题;konsole
)将
nohup
&/或该less
行放在括号中(使其成为子外壳)运行脚本
xterm
而不是konsole
nohup
阻止进程接收SIGHUP
信号,而CTRL + C发送SIGINT
信号。这就是为什么nohup
没有您期望的效果。
I think it is due to the handling within the database software, not on the shell
。程序将如何执行此操作?那我该如何停止呢?