bash rsync被信号2杀死

问题:我试图阻止用户通过使用ctrl + c取消脚本。 以下脚本完全执行,除了坚持死亡的rsync之外,显示错误“由信号2终止”。 是否有可能避免rsync死亡? 如果是这样,我可以把它放在后台,还是应该在前台?

脚本:

陷阱''SIGINT SIGTERM SIGQUIT

cd / tmp nohup rsync -e'ssh -o LogLevel = ERROR'-av –timeout = 10 –delete-excluded myapp.war myserver:/ tmp / </ dev / null> / tmp / teste 2> / tmp / teste2

let index = 0而[$ index -lt 400000]让index = index + 1完成

回声“脚本完成”回声“索引:$索引”

我怀疑ssh频道在rsync之前死了。

在rsync的pid中strace命令的输出结束之后:

(4,“\ 374 \ 17 \ 0 \ 7”,4)= 4 select(5,NULL,[4],[4],{10,0})= 1(out [4] (0)—— SIGCHLD(Child exited)@ 0(0)— wait4(-1,[{WIFEXITED(s),left {9,999998})— SIGINT(Interrupt)@ 0 (0,NULL,NULL)= && WEXITSTATUS(s)== 255}],WNOHANG,NULL)= 12738 wait4(-1,0x7fffaea6a85c,WNOHANG,NULL)= -1 ECHILD(无subprocess)rt_sigreturn(0xffffffffffffffff) NULL,NULL,{0,400000})= 0(超时)rt_sigaction(SIGUSR1,{SIG_IGN,[],SA_RESTORER,0x3fcb6326b0},NULL,8)= 0 rt_sigaction(SIGUSR2,{SIG_IGN,[],SA_RESTORER,0x3fcb6326b0} ,NULL,8)= 0 wait4(12738,0x7fffaea6aa7c,WNOHANG,NULL)= -1 ECHILD(无subprocess)getpid()= 12737 kill(12738,SIGUSR1)= -1 ESRCH “rsync错误:无法解释的错误(”…,72)= 72写入(2,“\ n”,1)= 1 exit_group(255)=?进程12737已分离

谢谢弗朗西斯科

您需要在脚本执行期间捕获Ctrl + C。

#!/bin/bash trap ctrl_c INT function ctrl_c() { echo "Oops CTRL-C not allowed!" } for i in `seq 1 5` do echo "doing something... blah blah blah... try pressing Ctrl+C" sleep 1 done 

希望这可以帮助!