以UNIX-y方式,我試圖啓動一個進程併爲其啓動背景,並將該進程的生命週期與我的shell聯繫起來。我想說的不僅僅是後臺進程的背景,我希望進程發送SIGTERM,或者它有一個關閉的打開的文件描述符,或者當shell退出時,所以shell的用戶不必明確地終止進程或得到「你有運行作業」的警告。將進程的生命與啓動它的shell聯繫起來
最終我想要一個程序,它可以唯一地爲每個shell運行,並隨該shell運行狀態,並在shell關閉時關閉。
IBM的DB2控制檯命令以這種方式工作。當連接到數據庫時,它會產生一個「db2bp」進程,該進程承載數據庫狀態和連接並將其綁定到您的shell。您可以連接多個不同的終端或ssh連接,每個連接都有其自己的db2bp進程,並且當這些進程關閉時,相應的db2bp進程將死亡,並且該連接將關閉。
DB2查詢然後通過db2命令啓動,db2命令只是將它轉交給相應的db2bp進程。我不知道它是如何與正確 db2bp進程進行通信,但也許它使用連接到stdin的tty設備作爲唯一密鑰?我想我也需要弄清楚。
我從來沒有寫過任何tty操作,所以我不知道哪裏可以開始。如果我能產生一個在shell退出時自動終止的進程,我想我可以計算出其餘部分。任何人都知道DB2是如何做到的?
是的,這是有效的!我想出了db2如何做,這不完全相同,但這是如此簡短。我的perl並不是那麼偉大,雖然...什麼是(-t)測試? – Kyren 2009-12-04 21:14:43
啊,找到了。 -t默認爲標準輸入,並測試以查看文件是否打開到tty ...非常漂亮。 – Kyren 2009-12-04 21:21:52