2011-10-07 58 views
0

我用這樣的腳本來控制一個很長時間運行的進程的stdin和stdout外部:bash腳本控制生成的進程

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

這工作得很好,當my_process退出尾巴過程,除了不退出。有沒有辦法在my_process退出時讓尾巴退出?

另外還有更好的方法來設置它?

+2

從'man tail':'--pid =帶有-f的PID,在進程ID,PID死亡後終止。如果你知道pid ...? – drysdam

+0

我怎樣才能獲得my_process的pid,但仍然能夠管到它? – whatupdave

+0

對於它的價值,我嘗試了'--pid = $$'和'exec my_process',但沒有太大的成功。 – tripleee

回答

1

實際上你在這裏制定了:繼續(-f)顯示這個不斷增長的文件的最後零線(-n0),並將它推下my_process的喉嚨。 雖然my_process確實退出了,但好像-f標誌阻止尾部退出。

要,你可以嘗試從內它終止尾巴一種簡單的方式很好,肯定拿完東西就離開孩子MY-:kill -SIGTERM $PPID

,甚至在一個非常巧妙的方法:trap "kill -SIGTERM $PPID" EXIT

如果my_process不一個bash shell腳本,試試這個:

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

我persume你是從日誌文件試圖管。您可以選擇性地將my_process的執行連接到rsyslog或使用inotifywait。