我已经编写了这个bash守护进程,它密切关注命名管道,将它看到的所有内容记录在名为$ LOG_FILE_BASENAME。$ DATE的文件中,并且还在$ LOG_FILE_BASENAME中创建了它的过滤版本。$ DATE :
while true
do
DATE=`date +%Y%m%d`
cat $NAMED_PIPE | tee -a "$LOG_FILE_BASENAME.$DATE" | grep -P -v "$EXCEPTIONS" >> "$ACTIONABLE_LOG_FILE"
done
守护程序运行时,这是进程表的外观:
/bin/sh the_daemon.sh
\_ cat the_fifo_queue
\_ tee -a log_file.20150807
\_ grep -P -v "regexp" > filtered_log_file
问题在于,当我杀死守护进程(SIGTERM)时,父进程不会收集由守护进程生成的cat,tee和grep进程。相反,他们成为孤儿并继续等待命名管道的输入。
一旦FIFO收到一些输入,它们就会按照指示处理该输入并死掉。
如何让守护进程在死亡前杀死它的孩子?
我知道我可以让守护进程手动收集其子进程的PID并在踢出它之前杀死它们,但是不是有自动方法来执行此操作吗?
由于