Bash守护进程并没有收集它的孩子

时间:2015-08-07 20:34:31

标签: linux unix process shell bash

我已经编写了这个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并在踢出它之前杀死它们,但是不是有自动方法来执行此操作吗?

由于

0 个答案:

没有答案