通过进程的前后台切换方式实现不同应用的切换。背景: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系统下流畅切换不同的应用的详细内容,更多请关注本站其它相关文章!