我想在 kill -9 <PID> 时将“<PID> Killed ~”输出到日志文件
I want to output "<PID> Killed ~" to logfile when it kill -9 <PID>
我想将此消息 /usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1
输出到日志文件。
然而
当我在控制台中执行 ex1.sh
时,"ex1.sh" 输出 /usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1
到控制台。
我想要的结果是 "ex1.sh" 输出到文件,而不是输出到控制台。
此来源是"ex1.sh"。
ex2.sh >> $LOG_FILE 2>&1 &
PID=`ps -ef | grep ex2.sh | grep -v grep | gawk '{print }'`
/bin/kill -9 $PID >> $LOG_FILE 2>&1 &
为什么 "ex1.sh" 将此消息输出到控制台?
原因是消息'/usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1
是由bashshell给出的,而不是由kill
命令给出的。
因此,如果您将 kill
命令输出重定向到文件,您将不会在文件中收到消息。
如果 运行 像 ./ex1.sh >> $LOG_FILE 2&>1
,消息将在日志文件中。因为 ./ex1.sh
派生了一个新的 bash 进程,所以 bash 进程将发出消息。
输出实际上不是由kill
命令或ex2.sh
写入的。它是由 shell 执行后台进程 ex2.sh
编写的。
执行脚本的 shell 在后台启动脚本 ex2.sh
作为子进程并监视它。当脚本被终止时,shell 通过打印消息来执行此操作。
在你的特殊情况下,shell 更了解被杀死的进程和正在执行 kill 的进程。所以它打印了一条相当冗长的消息。
如果您在终端 1 中启动 ex2.sh
(不带 '&')并从终端 2 将其终止,则终端 1 中的 shell 将只打印 "Killed"。
我想将此消息 /usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1
输出到日志文件。
然而
当我在控制台中执行 ex1.sh
时,"ex1.sh" 输出 /usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1
到控制台。
我想要的结果是 "ex1.sh" 输出到文件,而不是输出到控制台。
此来源是"ex1.sh"。
ex2.sh >> $LOG_FILE 2>&1 &
PID=`ps -ef | grep ex2.sh | grep -v grep | gawk '{print }'`
/bin/kill -9 $PID >> $LOG_FILE 2>&1 &
为什么 "ex1.sh" 将此消息输出到控制台?
原因是消息'/usr/local/ex1.sh: line xxx: <PID> Killed ex2.sh >> $LOG_FILE 2>&1
是由bashshell给出的,而不是由kill
命令给出的。
因此,如果您将 kill
命令输出重定向到文件,您将不会在文件中收到消息。
如果 运行 像 ./ex1.sh >> $LOG_FILE 2&>1
,消息将在日志文件中。因为 ./ex1.sh
派生了一个新的 bash 进程,所以 bash 进程将发出消息。
输出实际上不是由kill
命令或ex2.sh
写入的。它是由 shell 执行后台进程 ex2.sh
编写的。
执行脚本的 shell 在后台启动脚本 ex2.sh
作为子进程并监视它。当脚本被终止时,shell 通过打印消息来执行此操作。
在你的特殊情况下,shell 更了解被杀死的进程和正在执行 kill 的进程。所以它打印了一条相当冗长的消息。
如果您在终端 1 中启动 ex2.sh
(不带 '&')并从终端 2 将其终止,则终端 1 中的 shell 将只打印 "Killed"。