歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

如何退出啟動時自動運行的程序?


背景:在一個嵌入式linux的機器上開發了一個程序。 自己修改了/etc/init.d中的文件,將自己的執行程序加入到文件中,成功地實現了開機自動運行,但是,不知道該怎樣退出。按鍵後,屏幕上出現了字符,但是,沒有命令提示符,也沒有執行輸入的命令。按^c 也不能夠退出。不知道該怎樣退出?

>>> 此貼的回復 >> 如果你是寫道/etc/inittab中,用#來注釋你的那行,然後運行init 如果是用的連接文件如Sxxxx,把文件名改成Kxxxx

>>> 此貼的回復 >> 按^c 也不能夠退出???你難道在程序中接管了這樣一個信號??? 如果你的嵌入式設備上的LINUX上加入了網絡支持,並且開啟了telnet服務的話,一切就好辦法,直接從遠程登錄上去,然後再用kill -9殺掉那個進程就行了,然後再去配置文件注釋你的那個自啟動程序 如果連網絡功能都沒有,就看你的嵌入式設備上用的什麼存儲器了,如果是CF卡這類的可拆的存儲芯片,就用相應的讀卡器接到PC機上,再MOUNT上,再修改配置文件,如果是NOR FLASH這樣的不可拆的芯片,並且你的文件系統都放在了上面,就需要用JTAG方式重新再燒寫一次你的BOOTLOADER,KERNEL,FILE SYSTEM

>>> 此貼的回復 >> 我想那是因為你的程序接管了串口終端,在串口中輸入的任何字符都被你的程序接收了,從而沒有讓終端管理程序處理你的終止信號,忘了問一件事,你的默認終端是串口還是其它(也就是BASH管理的是什麼終端?)???? 目前你沒有任何軟辦法讓你的程序停止了,主要是看一下你的串口通信程序有沒有什麼可以溢出內存的地方,利用這種溢出內存的辦法讓你的程序終止,從而就可以運行到其它程序中去了 如果這種類似方法都不行的話,就只有打“存儲器”的主意了,如同我上一回復中所說的那樣

>>> 此貼的回復 >> 呵呵,我裝的是Ubuntu6.04版,本本是HP4106,顯示驅動,聲卡等等裝上去後就搞定.中文支持很好. http://cdimage.ubuntu.com/releases/dapper/flight-5/

>>> 此貼的回復 >> 我明白LZ的意思了,LZ采用的輸入設備是鍵盤,輸出設備可能是LCD之類,沒有采用串口終端,啟動時就像REDHAT的啟動界面一樣,無法使用CTRL C來結束掉程序,並且只會響應CTRL ALT DEL這個熱鍵,需要登錄後才能使用CTRL C,這在PC機上也是一樣的情況,刷CF卡的方法也簡單啊,為什麼不用呢??? 還有就是GRUB的方法,一般說來在嵌入式上很少用GRUB,都是自己移植的BOOTLOADER,如VIVI,U-BOOT等。用GRUB的方法就是讓你將默認終端重定向到串口設備,如果是這樣的話,你的串口通信程序多半是操作的原始串口,而系統在一啟動就打開了相應的串口,你的串口程序就會打開串口失敗,從而退出,從而就達到結束它的目的了 如果你用的是U-BOOT,VIVI之類的,在啟動的時候可以改變讓你的內核使用的默認終端的,當然,你需要在內核中首先支持,你可以在網上查找如何讓你的內核支持串口終端之類的文章,我猜你現在還是可以燒內核,燒BOOTLOADER的吧?只不過無法進入到應用程序而已???!!!!

>>> 此貼的回復 >> 一般說來,LINUX內核完成初始化後,第一個運行的程序就是init,然後在裡面啟動bash,再由此解析初始化啟動腳本,最後再啟動XWINDOW,所以首先都是由bash來接管控制台,也就是說你的CTRL C是由BASH響應並KILL掉你的進程,圖形界面往往都是從BASH來啟動的,在未登錄的情況下,你的那個BASH不會響應CTRL C信號,若要在這個過程中加以控制,我想首先得從init程序入手,去找出為什麼在未登錄之前不響應CTRL C信號?即便是你想做成交互式啟動,我想也需要從這個程序入手,啟動過程如下: init ---------- inittab -------------- rc.local

你如果僅僅只是想控制你的那個串口程序的話,建議在串口程序中規定一定的協議,由程序來互責與用戶交互,或者就直接使用串口終端的方式(這樣有一缺點就是你的使用終端的程序都會受影響) 還有一建議,就是將你的自啟動程序放在rc.local中,我上面所說的啟動過程只是一種約定,完全可以不采用這種方式,因為你的init程序可以自己編寫,你還可以完全不用rc.local文件,就如同你現在的方式一樣。

>>> 此貼的回復 >> 你找到在什麼地方啟動的sh,就在哪個地方去加上你要自啟動的程序就行了 主要是去找ect目錄下的各種腳本文件,實在不行,去看你的init程序的源碼


Copyright © Linux教程網 All Rights Reserved