在將問題標記爲重複之前,請閱讀我遇到的各種問題。一點背景:我們正在開發一個運行在嵌入式ARM sbc上的C++應用程序,使用debian linux的一個精簡版變體。應用程序從啓動腳本啓動時開始啓動,並將各種信息輸出到stdout。我們希望能夠使用SSH/Telnet進行連接並讀取應用程序輸出,而無需終止進程並重新啓動當前bash會話。我想爲非技術型人士創建一個簡單的.sh腳本。從一個進程讀取標準輸出(linux嵌入式)
這裏發佈的similar question的第一個解決方案是使用gdb。首先它不是用戶友好的(需要手動編寫多個命令),我不知道爲什麼,但似乎沒有輸出任何東西到文件中。
第二個解決方案strace -ewrite -p PID
完美地工作,這就是我想要的。問題是,比標準輸出有更多的信息,並且格式不正確。
我設法得到一個「可接受」的結果strace -e write=1 -s 1024 -p 20049 2>&1 | grep "write(1,"
但它仍然有多餘的write(1, "...", 19) = 19
文本。到目前爲止,這只是一些字符串格式化,我在其他頁面上發現這條線表示它實現了很好的格式化:strace -ff -e write=1,2 -s 1024 -p PID 2>&1 | grep "^ |" | cut -c11-60 | sed -e 's/ //g' | xxd -r -p
在這個命令中有一些東西我覺得奇怪(爲什麼-ff ?,爲什麼grep「^ |」?,爲什麼在那裏使用xxd?),並且它只是在我嘗試時不輸出任何東西。
不幸的是,我們確實使用了busybox(1.7.1)的老bug版本,它有多個管道的問題。該錯誤給我帶來不好的結果。例如,如果我只做grep,它的工作原理,如果我只切斷它也行,但我們說「grep」寫(1,「| cut -c11-60」什麼都不返回。解決方案只是更新busybox並使用這些多個管道來格式化字符串,但我們無法更新它,因爲os發行版已經安裝在運往我們全球客戶的數千塊主板上..
任何人都有奇蹟解決方案?謝謝
您的「lite」Linux是否帶有程序「屏幕」,或者您可以爲其構建屏幕? – 2012-02-11 02:00:36
屏幕不存在,但可能很容易構建。似乎它可以很好地工作,但我不喜歡與strace不同的事實,屏幕必須是應用程序的父進程,並且不能只連接到已經運行的應用程序。 – Dunge 2012-02-13 14:42:12