微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

守护进程不会杀死正在读取命名pipe道的孩子

我已经写了这个bash守护进程,它关注了一个命名pipe道,logging了一个名为$LOG_FILE_BASENAME.$DATE的文件,并在$ACTIONABLE_LOG_FILE创build了它的过滤版本:

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 pkill -P $$ # Here it's where it should kill it's children exit 0

当守护进程运行时,这就是进程表的外观:

/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进程不会被父进程收集。 相反,他们成为孤儿,并继续等待命名pipe道上的input。

一旦FIFO接收到一些input,则它们按照指示处理该input并死亡。

将node.js + expressjs应用程序的NODE_ENV设置为ubuntu下的守护程序

如何用setuptools打包Python守护进程

守护进程不停止在Linux中

附加守护进程valgrind并收集每个守护进程调用的日志

我如何在Linux Ubuntu中创build.sh扩展文件

如何让守护进程在死亡之前杀死自己的孩子? 为什么他们不死于pkill -P $$ ?

PHP作为守护进程/服务

在Linux上守护Java应用程序的最佳方式

修改python守护进程脚本,停止不起作用

我怎么要求一个低编号的端口作为非根的“正确的方式”

Linux / Bash文件描述符在执行守护进程时

你想为你的脚本设置一个信号处理程序,以防脚本自身得到信号时终止其进程组的所有成员(它的子程序):

#!/bin/bash function handle_sigterm() { pkill -P $$ exit 0 } trap handle_sigterm SIGTERM 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 handle_sigterm exit 0

更新:

根据pilcrow的评论替换

cat $NAMED_PIPE | tee -a "$LOG_FILE_BASENAME.$DATE" | grep -P -v "$EXCEPTIONS" >> "$ACTIONABLE_LOG_FILE"

通过

cat $NAMED_PIPE | tee -a "$LOG_FILE_BASENAME.$DATE" | grep -P -v "$EXCEPTIONS" >> "$ACTIONABLE_LOG_FILE" & wait $!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐