在while循环中自毁析子进程(Bash)

时间:2018-02-15 11:09:16

标签: bash while-loop timeout sleep kill

我正在尝试定期拖动文件。问题是,如果ctrl + c或终端突然关闭,我必须以某种方式杀死最后一个进程,否则尾部进程将继续运行。

1.以下脚本可以使用,但如果会话在kill之前终止,则最后一个进程可能会保持打开状态。

#cat test.sh
echo "Choose the polling interval: "
read interval
while :
do
tail -f -n0 /var/log/messages &
pid=$!
sleep "$interval"
kill "$pid"
done

输出:

#./test.sh
Choose the polling interval:
2
./test.sh: line 9:  8263 Terminated              tail -f -n0 /var/log/messages
./test.sh: line 9:  8265 Terminated              tail -f -n0 /var/log/messages
Ctrl^C.
/test.sh: line 9:  8267 Terminated              tail -f -n0 /var/log/messages
#ps auxfww | grep [t]ail | wc -l
1

2.如果我尝试在后台进行杀戮,我会看到很多错误,如下所示。

#cat test_bg.sh
echo "Choose the polling interval: "
read interval
while :
do
tail -f -n0 /var/log/messages &
pid=$!
(sleep "$interval" ; kill "$pid") &
done

输出:

#./test_bg.sh

Choose the polling interval:
2
tail: inotify cannot be used, reverting to polling: Too many open files
........
tail: inotify cannot be used, reverting to polling: Too many open files

如果突然中断,我如何杀死最后一个进程?

1 个答案:

答案 0 :(得分:0)

我设法让它像这样等待:

config/sockets.js