本文主要介紹在Linux下運行程序,及在前臺和後臺之間切換與控制的方法。
前臺運行程序
通常的運行方法是:./a.out
,表示運行當前目錄下的可執行程序,並運行在前臺。
運行在前臺指的是當前終端窗口會暫停接受其他指令,而處於a.out的運行狀態。當關閉當前終端窗口時,程序也會被關閉。
注意,不管運行在前臺還是後臺的程序,如果有輸出到終端的程序指令,如cout, cerr
等,都會在運行的終端上輸出。
後臺運行程序
程序運行在後臺時,當前終端可以接受其他指令。
運行後臺程序的方法有兩種:
- 在運行程序指令的最後加上符號:
&
,如./a.out&
。注意,此程序仍依賴於當前終端,如果終端關閉,程序也會退出。 - 使用nohup命令:
nohup ./a.out&
。該指令不依賴於終端,即使終端關閉,程序仍在後臺運行。如果標準輸出是終端,會寫入nohup.out
文件,如果標準錯誤是終端,會重定向到標準輸出。
查看後臺程序
兩種方式:
jobs -l
,-l
參數顯示PID,前面的序號標識進程序號,+
號表示當前任務,-
號表示下一個任務。注意,該命令只能查看當前終端的後臺任務,在其他終端啓動的後臺任務不可見。ps aux
,查看所有運行的程序。
進程的前後臺切換
前臺到後臺運行
如果程序已經在前臺運行,不想關閉程序並重新啓動,可以執行以下步驟:
ctrl + z
bg %進程序號
第一步是將一個正在前臺執行的程序放到後臺,並處於暫停狀態。第二步是繼續運行一個後臺暫停的程序,如果只有一個程序,可省略參數。
後臺程序到前臺
查看到後臺程序的進程序號後,使用fg %進程序號
即可。如果只有一個程序,可省略參數。
關閉正在運行的程序
對於前臺程序,可直接在終端上按下ctrl + c
關閉當前程序。
對於後臺程序,有以下方法:
- 先通過ps查看進程號,再
kill -9 pid
,-9
參數可省略,默認信號即可(前提是進程未捕獲該信號,下同)。 killall a.out
- 先通過jobs查看進程序號,再
kill %進程序號
- 根據程序對信號的處理情況,發送相應信號。