通過進程的前後臺切換方式實現不同應用的切換。背景:linux啓動一個程序後,切換到後臺執行,想繼續在linux操作。
在Linux中,你可以使用以下幾種方法使一個程序在後臺啓動並退出,但仍然保持其進程運行:
一、Linux啓動一個程序在後臺執行
1. 使用nohup和&:
$ nohup your_program &登錄後複製
使用nohup命令可以使程序忽略掛斷信號(SIGHUP),這樣即使你退出了終端,程序也會繼續運行。&符號使程序在後臺運行。
2. 使用ctrl+Z:
如果你已經在前臺啓動了程序,可以使用ctrl+z命令將其移到後臺:
$ ./your_program# 運行在前臺$ 按 Ctrl + Z# 將程序暫停,並將其移到後臺 $ bg#在後臺繼續運行程序$ disown -h# 使程序在你退出終端時仍然運行登錄後複製
3.使用screen:
screen是一個在UNIX和Linux系統上運行的終端複用器,它允許用戶在同一臺機器上的一個物理終端上啓動多個虛擬終端。
通過創建一個新的會話,你可以在其中運行程序,並且即使退出終端,該會話仍將保持活動狀態。隨後,你可以重新連接到會話來查看和控制程序的運行。
screen的功能
screen的功能大體有三個:
- 會話恢復:只要Screen本身沒有終止,在其內部運行的會話都可以恢復。這一點對於遠程登錄的用戶特別有用——即使網絡連接中斷,用戶也不會失去對已經打開的命令行會話的控制。只要再次登錄到主機上執行screen -r就可以恢復會話的運行。同樣在暫時離開的時候,也可以執行分離命令detach,在保證裏面的程序正常運行的情況下讓Screen掛起(切換到後臺)。這一點和圖形界面下的VNC很相似。
- 多窗口:在Screen環境下,所有的會話都獨立的運行,並擁有各自的編號、輸入、輸出和窗口緩存。用戶可以通過快捷鍵在不同的窗口下切換,並可以自由的重定向各個窗口的輸入和輸出。
- 會話共享:Screen可以讓一個或多個用戶從不同終端多次登錄一個會話,並共享會話的所有特性(比如可以看到完全相同的輸出)。它同時提供了窗口訪問權限的機制,可以對窗口進行密碼保護。
如何使用screen :安裝 sudo apt install screen
3.1 創建會話
$ screen -S session_name your_program登錄後複製
3.2 要重新連接到此會話:
$ screen -r session_name登錄後複製
3.3 中途退出會話,但程序繼續運行:
如果你想從 screen 會話中退出,但不終止正在運行的程序,你可以按下 Ctrl + A,然後按下 D。
這將會從 screen 會話中分離,但程序仍然在後臺運行。
示例:使用secreen開啓多個會話在會話中執行程序。
每個會話相當於一個邏輯終端,可以退出會話,讓程序依然運行。
$ screen -S appDemo_session ./appDemo.lua# 開啓新的會話,並執行appDemo腳本程序> helpAvailable commands:1. show2. exit3. help4. run> # 按ctrl+AD 退出會話[detached from 1546455.appDemo_session]$ screen -r appDemo_session[detached from 1546455.appDemo_session]$$$ screen -ls# 查看所有會話There is a screen on:1546455.appDemo_session (2024年01月24日 10時01分53秒) (Detached)1 Socket in /run/screen/S-zsh.$登錄後複製
3.4 結束一個 screen 會話:
如果你想結束一個 screen 會話並停止其中的程序,你可以首先使用 screen -r [會話名稱或ID] 重新連接到該會話,然後按下 Ctrl + C 來終止程序。
接着,你可以使用 exit 或按 Ctrl + D 來結束該 screen 會話。
$ screen -S appDemo_session ./appDemo.lua-------------以下在在會話中的邏輯終端顯示,退出後會消失> helpAvailable commands:1. show2. exit3. help4. run> exitexitCLI-------------[screen is terminating]$登錄後複製
3.5 創建多個窗口:
在同一個 screen 會話中,你可以使用 Ctrl + A 然後再按 C 來創建一個新的窗口。
每個窗口可以有自己的命令行歷史。要切換窗口,只需按 Ctrl + A 然後按 N(下一個)或 P(上一個)。
要關閉窗口,只需按 Ctrl + A 然後按 K,然後選擇要關閉的窗口。
3.6 命名窗口:
你可以給窗口命名以方便識別。只需按 Ctrl + A 然後按 A(重命名)。輸入新名稱並按回車。
3.7 查看所有窗口,
可以按下Ctrl+a,然後按下w鍵。這將顯示當前screen會話中的所有窗口列表,包括窗口的編號和名稱。
$ screen -S appDemo_session ./appDemo.lua-------------以下在在會話中的邏輯終端顯示,退出後會消失> helpAvailable commands:1. show2. exit3. help4. run>$ lsappDemo.lua# 按ctrl+A 然後按K,輸入y表示結束當前窗口Really kill this window [y/n]登錄後複製
在一個會話中創建多個窗口
$ lsappDemo.lua# 按三次ctrl+a,然後按c,創建三個各自獨立的窗口,每個窗口有自己的命令行歷史# 然後按 ctrl+a,然後按w查看所有窗口0$ appDemo.lua1$ bash2-$ bash3*$ bash# 現在相當於一個會話appDemo_session中有四個窗口,需要在四個窗口都exit才能退出該會話登錄後複製
二、ctrl+Z停止了進程之後,怎麼再進入該程序?
在Unix和Linux系統中,當你使用Ctrl+Z將一個程序暫停並放到後臺時,該程序實際上是被掛起(暫停)了。
爲了再次運行這個程序,你可以使用以下方法:
bg登錄後複製
fg %1登錄後複製
其中%1是你想要移到前臺的掛起程序的編號。你可以使用jobs命令查看掛起的程序的編號。
3. jobs:
使用jobs命令可以列出當前掛起的程序。這些程序的編號可以幫助你確定要使用fg或bg命令時應該使用的編號。
jobs -l# 列出所有掛起的程序及其PID登錄後複製
kill %1登錄後複製
請注意,上述方法主要適用於shell環境中。如果你在圖形界面中(如使用X Window System)運行程序,那麼你可能需要使用不同的方法來控制程序的運行。
三、綜合example示範
$ ./student===== 學生信息管理系統 =====1. 錄入學生信息2. 顯示學生信息3. 查詢學生信息4. 修改學生信息5. 刪除學生信息6. 退出請選擇操作: ^Z[1]+已停止 ./student$ bg[1]+ ./student &[1]+已停止 ./student$ jobs -l[1]+ 1545288 停止 (tty 輸入) ./student$ ./stu11Student Information Management System1. Add Student2. Display Students3. Search Student4. Delete Student5. ExitEnter your choice: ^Z[2]+已停止 ./stu11$ jobs -l[1]- 1545288 停止 (tty 輸入) ./student[2]+ 1545290 停止./stu11$登錄後複製
$ ./appDemo.lua> helpAvailable commands:1. show2. exit3. help4. run> ^Z[2]+已停止 ./appDemo.lua$ jobs -l[1]- 1545480 停止./stu11[2]+ 1545484 停止./appDemo.lua$ bg[2]+ ./appDemo.lua &$ fg %2./appDemo.luaUnknown command. Type 'help' for available commands.> helpAvailable commands:1. show2. exit3. help4. run> ^Z[2]+已停止 ./appDemo.lua登錄後複製
以上就是如何在Linux系統下流暢切換不同的應用的詳細內容,更多請關注本站其它相關文章!