bash脚本控制生成的进程

时间:2011-10-07 01:49:08

标签: bash unix process

我正在使用这样的脚本从外部控制很长时间运行的进程的stdin和stdout:

#!/bin/sh
touch process.stdin
tail -fn0 process.stdin | my_process > process.stdout

这样可以正常工作,除非my_process退出尾部进程不退出。当my_process退出时,有没有办法让尾巴退出?

或者有更好的方法来设置它吗?

1 个答案:

答案 0 :(得分:1)

你实际上在这里制定:继续(-f)显示这个不断增长的文件的最后一行(-n0)并将其推到my_process的喉咙。 虽然my_process确实退出,但似乎-f标志阻止尾部退出。

要以简单明了的方式很好地结束事情,你可以尝试在退出时从孩子的my_program中终止尾部:kill -SIGTERM $PPID

甚至以非常简洁的方式:trap "kill -SIGTERM $PPID" EXIT

如果my_process不是bash shell脚本,请尝试:

tail -f process.stdin | ( my_process > process.stdout ; kill -SIGTERM $PPID )

我认为您正在尝试从日志文件中进行管道传输。您也可以将my_process的执行连接到rsyslog或使用inotifywait。