Linux “我想输出”&书信电报;PID>;杀死;当它终止时记录到日志文件-9<;PID>;

Linux “我想输出”&书信电报;PID>;杀死;当它终止时记录到日志文件-9<;PID>;,linux,bash,kill,Linux,Bash,Kill,我想将此消息/usr/local/ex1.sh:line xxx:Killed ex2.sh>$LOG\u FILE 2>&1输出到日志文件 然而 当我在控制台中执行ex1.sh时,“ex1.sh”输出/usr/local/ex1.sh:第xxx行:将ex2.sh>$LOG\u FILE 2>&1终止到控制台 我想要的结果是“ex1.sh”输出到文件,而不是输出到控制台 这个来源是“ex1.sh” 为什么“ex1.sh”将此消息输出到控制台?原因是消息”/usr/local/ex1.sh:lin

我想将此消息
/usr/local/ex1.sh:line xxx:Killed ex2.sh>$LOG\u FILE 2>&1
输出到日志文件

然而

当我在控制台中执行
ex1.sh
时,“ex1.sh”输出
/usr/local/ex1.sh:第xxx行:将ex2.sh>$LOG\u FILE 2>&1
终止到控制台

我想要的结果是“ex1.sh”输出到文件,而不是输出到控制台

这个来源是“ex1.sh”


为什么“ex1.sh”将此消息输出到控制台?

原因是消息
”/usr/local/ex1.sh:line xxx:Killed ex2.sh>$LOG\u FILE 2>&1
bash shell给出,而不是由
kill
命令给出

因此,如果您将
kill
命令输出重定向到一个文件,您将无法在该文件中获得消息


如果像
/ex1.sh>$LOG\u FILE 2&>1那样运行,则消息将出现在日志文件中。因为
/ex1.sh
派生了一个新的bash进程,所以bash进程将发出消息

输出实际上不是由
kill
命令或
ex2.sh
编写的。它是由shell执行后台进程
ex2.sh
编写的

执行脚本的shell在后台将脚本
ex2.sh
作为子进程启动,并正在监视它。当脚本被终止时,shell通过打印消息对此进行操作

在您的特殊情况下,shell了解更多关于kill进程和执行kill的进程的信息。所以它打印了一条相当冗长的信息


如果在终端1中启动
ex2.sh
(不带“&”)并从终端2将其终止,则终端1中的外壳将只打印“终止”

为什么要在后台运行
kill
?因为我想选中“作为异步处理停止进程”。我试图同步执行。但我不能输出到文件。谢谢你的回答。
ex2.sh >> $LOG_FILE 2>&1 &
PID=`ps -ef | grep ex2.sh | grep -v grep | gawk '{print $2}'`
/bin/kill -9 $PID >> $LOG_FILE 2>&1 &