我想在杀死-9 <pid>时向日志文件输出“ <pid> Killed〜”

时间:2019-01-08 08:42:07

标签: linux bash kill

我想将此消息/usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1输出到日志文件。

但是

当我在控制台中执行/usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1时,“ ex1.sh”输出ex1.sh到控制台。

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

此来源为“ ex1.sh”。

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 &

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

2 个答案:

答案 0 :(得分:2)

原因是消息'/usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1是由 bash shell 发出的,而不是由kill命令发出的。

因此,如果将kill命令输出重定向到文件,则不会在文件中得到消息。

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

答案 1 :(得分:1)

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

执行脚本的shell作为子进程在后台启动脚本ex2.sh并对其进行监视。当脚本被杀死时,shell通过打印消息来对此起作用。

在您的特殊情况下,shell会更多地了解被终止的进程和执行终止的进程。因此它会显示一条相当冗长的消息。

如果在终端1中启动ex2.sh(不带'&')并从终端2中将其杀死,则终端1中的shell将仅显示“ Killed”。