通过进程的前后台切换方式实现不同应用的切换。
背景:linux启动一个程序后,切换到后台执行,想继续在linux操作。
在Linux中,你可以使用以下几种方法使一个程序在后台启动并退出,但仍然保持其进程运行:
nohup
和&
:
$ nohup your_program &
使用nohup
命令可以使程序忽略挂断信号(SIGHUP),这样即使你退出了终端,程序也会继续运行。&
符号使程序在后台运行。
ctrl+Z
:
如果你已经在前台启动了程序,可以使用ctrl+z
命令将其移到后台:
$ ./your_program# 运行在前台 $ 按 Ctrl + Z# 将程序暂停,并将其移到后台 $ bg#在后台继续运行程序 $ disown -h# 使程序在你退出终端时仍然运行
screen
:
screen
是一个在UNIX和Linux系统上运行的终端复用器,它允许用户在同一台机器上的一个物理终端上启动多个虚拟终端。
通过创建一个新的会话,你可以在其中运行程序,并且即使退出终端,该会话仍将保持活动状态。随后,你可以重新连接到会话来查看和控制程序的运行。
screen的功能
screen的功能大体有三个:
会话恢复
:只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。多窗口
:在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。会话共享
:Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。如何使用screen
:安装 sudo apt install screen
$ screen -S session_name your_program
$ screen -r session_name
如果你想从 screen
会话中退出,但不终止正在运行的程序,你可以按下 Ctrl
+ A
,然后按下 D
会话中退出,但不终止正在运行的程序,你可以按下 Ctrl
+ A
,然后按下 D
。
这将会从 screen
会话中分离,但程序仍然在后台运行。
示例:使用secreen开启多个会话在会话中执行程序。
每个会话相当于一个逻辑终端,可以退出会话,让程序依然运行。
$ screen -S appDemo_session ./appDemo.lua # 开启新的会话,并执行appDemo脚本程序 > help Available commands: 1. show 2. exit 3. help 4. 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. $
screen
会话:如果你想结束一个 screen
会话并停止其中的程序,你可以首先使用 screen -r [会话名称或ID]
重新连接到该会话,然后按下 Ctrl
+ C
会话并停止其中的程序,你可以首先使用 screen -r [会话名称或ID]
重新连接到该会话,然后按下 Ctrl
+ C
来终止程序。
接着,你可以使用 exit
或按 Ctrl
+ D
来结束该 exit
或按 Ctrl
+ D
来结束该 screen
会话。
$ screen -S appDemo_session ./appDemo.lua -------------以下在在会话中的逻辑终端显示,退出后会消失 > help Available commands: 1. show 2. exit 3. help 4. run > exit exitCLI ------------- [screen is terminating] $
在同一个 screen
会话中,你可以使用 Ctrl
+ A
然后再按 C
会话中,你可以使用 Ctrl
+ A
然后再按 C
来创建一个新的窗口。
每个窗口可以有自己的命令行历史。要切换窗口,只需按 Ctrl
+ A
然后按 N
(下一个)或 P
(上一个)。
要关闭窗口,只需按 Ctrl
+ A
然后按 K
,然后选择要关闭的窗口。
你可以给窗口命名以方便识别。只需按 Ctrl
+ A
然后按 A
(重命名)。输入新名称并按回车。
可以按下Ctrl+a
,然后按下w
键。这将显示当前Ctrl+a
,然后按下w
键。这将显示当前screen
会话中的所有窗口列表,包括窗口的编号和名称。
$ screen -S appDemo_session ./appDemo.lua -------------以下在在会话中的逻辑终端显示,退出后会消失 > help Available commands: 1. show 2. exit 3. help 4. run > $ ls appDemo.lua # 按ctrl+A 然后按K,输入y表示结束当前窗口 Really kill this window [y/n]
在一个会话中创建多个窗口
$ ls appDemo.lua # 按三次ctrl+a,然后按c,创建三个各自独立的窗口,每个窗口有自己的命令行历史 # 然后按 ctrl+a,然后按w查看所有窗口 0$ appDemo.lua1$ bash2-$ bash3*$ bash # 现在相当于一个会话appDemo_session中有四个窗口,需要在四个窗口都exit才能退出该会话
在Unix和Linux系统中,当你使用Ctrl+Z
将一个程序暂停并放到后台时,该程序实际上是被挂起(暂停)了。
为了再次运行这个程序,你可以使用以下方法:
bg
命令可以将挂起的程序放到后台继续运行。bg
fg
命令。fg %1
其中%1
是你想要移到前台的挂起程序的编号。你可以使用jobs
命令查看挂起的程序的编号。
3. jobs:
使用jobs
命令可以列出当前挂起的程序。这些程序的编号可以帮助你确定要使用fg
或bg
命令时应该使用的编号。
jobs -l# 列出所有挂起的程序及其PID
kill
命令。但是,首先确保你真的想要结束它。kill %1
请注意,上述方法主要适用于shell环境中。如果你在图形界面中(如使用X Window System)运行程序,那么你可能需要使用不同的方法来控制程序的运行。
$ ./student ===== 学生信息管理系统 ===== 1. 录入学生信息 2. 显示学生信息 3. 查询学生信息 4. 修改学生信息 5. 删除学生信息 6. 退出 请选择操作: ^Z [1]+已停止 ./student $ bg [1]+ ./student & [1]+已停止 ./student $ jobs -l [1]+ 1545288 停止 (tty 输入) ./student $ ./stu11 Student Information Management System 1. Add Student 2. Display Students 3. Search Student 4. Delete Student 5. Exit Enter your choice: ^Z [2]+已停止 ./stu11 $ jobs -l [1]- 1545288 停止 (tty 输入) ./student [2]+ 1545290 停止./stu11 $
$ ./appDemo.lua > help Available commands: 1. show 2. exit 3. help 4. run > ^Z [2]+已停止 ./appDemo.lua $ jobs -l [1]- 1545480 停止./stu11 [2]+ 1545484 停止./appDemo.lua $ bg [2]+ ./appDemo.lua & $ fg %2 ./appDemo.lua Unknown command. Type 'help' for available commands. > help Available commands: 1. show 2. exit 3. help 4. run > ^Z [2]+已停止 ./appDemo.lua
以上是如何在Linux系统下流畅切换不同的应用的详细内容。更多信息请关注PHP中文网其他相关文章!