2009-12-21 51 views
0

我爲我的Sheevaplug(運行默認的Ubuntu安裝)編寫了一個cgi-bin程序,它顯示瀏覽器頁面中的一個shell。它是放置在cgi-bin文件夾中並在瀏覽器中查看的單個C程序。它會自動啓動一個守護進程,守護進程派生一個shell實例。 cgi-bin通過共享內存塊與守護進程進行通信,守護進程通過將stdin/stdout重定向到shell的stdout/stdin來與外殼進行通信。當你離開頁面時,它會自動關閉守護進程。bin/sh -i在分叉進程中出現問題,錯誤:'無法訪問tty,關閉了作業控制'

如果我使用「/ bin/sh」啓動它,並且我一次從瀏覽器發送一個完整的命令行,它就可以工作。但使用這種設計,它不是互動的。

所以我改變了它一次發送一個字符到「/ bin/sh」並添加了「-i」,以便shell以交互模式運行。

當shell啓動時,它顯示錯誤「無法訪問TTY,關閉了作業控制。」

然後它顯示'$',當它準備好輸入和似乎工作,但發送刪除字符到它只是混淆它,它不能正確處理刪除。我不確定它是否處於交互模式。當我輸入「蘇根」我得到的錯誤「必須從終端」運行

任何想法,我做錯了

PS:什麼時候我已經完成它將會在GPL下發布。

回答

5

對於交互模式,sh希望與終端或模擬一個(pseudo-terminal)的東西交談,而不僅僅是直接IO管道。考慮使用forkpty啓動從啓動shell的過程,並與流提供的。

+0

謝謝,我改變了fork forkpty,現在最初的錯誤信息沒有出現anym礦石,但我仍然得到'必須從終端運行',我嘗試和'su根',還有什麼想法? – KPexEA 2009-12-21 00:46:07

+0

也許你可以讓你的CGI成爲一個setuid程序? – 2009-12-21 00:54:46

+0

如果我在根目錄下手動啓動我的守護進程,但它不起作用,如果守護進程由cgi-bin自動啓動。所以我還有更多的東西需要弄清楚。謝謝! – KPexEA 2009-12-21 03:43:38

相關問題