我正在使用这样的脚本从外部控制很长时间运行的进程的stdin和stdout:
#!/bin/sh
touch process.stdin
tail -fn0 process.stdin | my_process > process.stdout
这样可以正常工作,除非my_process退出尾部进程不退出。当my_process退出时,有没有办法让尾巴退出?
或者有更好的方法来设置它吗?
答案 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。