一、引言

不知道各位有没有遇到过如下囧境:”正在开心地使用 vim 编辑文件,突然发现忘记复制某些内容,只能暂时保存退出,复制好后重新打开文件继续编辑,或者干脆再打开一个终端,搞得十分凌乱?”。那有没有一种不退出 vim 程序,又能自由切到终端上执行其他命令的方法呢?当然有啦,而且不止一种(比如在 vim 命令模式下输入 :!command,不过这并不是今天想要介绍的内容),今天我们就利用 Ctrl+Z 快捷键来实现。

二、使用 Ctrl+Z 完成多任务切换

在 Linux 系统中,按下 Ctrl+Z 实际上是向当前程序发送了挂起中断信号(SIGTSTP),作用是将其挂起并放入后台。注意,挂起之后,程序就停止执行了,但是并没有退出。例如,我们编辑一个文件 vim file.txt,输入些内容后,然后在命令模式,按下 ctrl+z

[root@dev tmp]# vim file.txt
add some contents
// 按下 ctrl+z[3]+  Stopped                 vim file.txt

我们会回到终端,可通过 ps -aux | grep file.txt | grep -v grep 查看进程状态:

[root@dev tmp]# ps -aux | grep file.txt | grep -v grep
root     28714  0.0  0.1 149380  5016 pts/1    T    16:35   0:00 vim file.txt

可以看到,进程状态为 T,即停止状态。

我们通过 jobs 命令,可以查看当前,后台进程有哪些:

[root@dev tmp]# jobs -l
[1]+ 32034 Stopped                 vim file.txt

可以看到,目前只有一个后台任务,编号为 1,状态为 Stopped。
我们可以通过执行 fg <job 编号> 将其唤醒到前台,(如果不加编号,则唤醒最近被放入后台的任务):

[root@dev tmp]# fg 1

执行完该命令,我们就重新进入 vim file.txt 的编辑界面了,也就从终端重新进入了 vim 程序:

add some contents
~
~
-- INSERT --

值得一提的是,我们可以同时打开多个程序,按下 ctrl+z 将其分别临时挂起,然后通过 jobsfg 命令的配合,在多个任务间自由切换,实现多任务管理。

[root@dev tmp]# jobs
[1]   Stopped                 vim file.txt
[2]-  Stopped                 vim file-2.txt
[3]+  Stopped                 vim file-3.txt
[root@dev tmp]# fg 2

附加说明:如果希望后台进程不维持在后台停止状态,而是让其继续执行,可以通过 bg 命令将其转为后台执行状态:

[root@dev tmp]# jobs
[1]-  Stopped                 vim file.txt
[6]+  Stopped                 tail -f /etc/hosts
[root@dev tmp]# bg 6
[6]+ tail -f /etc/hosts &
[root@dev tmp]# jobs
[root@dev-01 tmp]# jobs
[1]+  Stopped                 vim file.txt
[6]-  Running                 tail -f /etc/hosts &

可以看到,起初通过执行 ctrl+z 挂起的 6 号进程是 Stopped 的,通过执行 bg 6,其状态变为 Running 了。

Linux 下查看支持的中断信号,可以借助 kill -l

[root@dev tmp]# kill -l1) SIGHUP     2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP6) SIGABRT    7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

总结:灵活运用 ctrl+z / jobs / fg / bg 就能实现简单的 Linux 终端下的多任务管理!

Linux 下的任务切换神器 Ctrl+Z相关推荐

  1. linux查询mac地址分屏,Tmux: linux下的分屏神器

    tmux tmux(terminal multiplexer)是Linux上的终端窗口的分屏神器.在一个终端窗口中可以分多个屏同时使用. 安装 Tmux 的安装. # Ubuntu $ sudo ap ...

  2. Linux下内存问题检测神器 valgrind

    Linux下内存问题检测神器:Valgrind - Madcola - 博客园 (cnblogs.com)

  3. linux vscode输入法无法切换,vscode vim 在 mac osx 和 linux 下输入法自动切换

    目前 vscode 的 vim 插件支持在不同输入模式下自动切换输入法,可是 vscode 的配置目前不支持判断操作系统, 所以关于输入法切换的相关配置不能在 mac osx 和 linux 下通用, ...

  4. linux下后台启动切换目录,如何让Linux下后台运行的程序到前台来

    满意答案 wc34071209 2016.12.24 采纳率:53%    等级:10 已帮助:719人 linux前后台任务切换方法: 1.在Linux终端运行命令的时候,在命令末尾加上 & ...

  5. linux下gcc版本切换

    今天在linux环境下编译c文件的时候发现库函数居然找不到路径,查了好久都没有找到是什么问题,最后想到的解决办法:把gcc版本切回到linux自带版本 1.查看linux下已安装gcc版本 ls /u ...

  6. linux下java版本切换

    image.png java切换 当Linux中有多个jdk版本的时候,可能会导致运行时错误,这时需要将javac和java的版本调成一致,即编译时版本和运行时版本要相同. 可用一下命令进行java版 ...

  7. ubuntu linux下使用vscode切换python虚拟环境

    VSCODE的桌面腳本是: [Desktop Entry] Version=1.0 Type=Application Name=VSCODE Comment= Exec=/home/appleyuch ...

  8. 看我解决Linux下的OTG切换问题

    1.硬件原理图 看下面的原理图 VCC_OTG_EN 引脚,这个脚主要是用来控制给外部OTG设备提供电源控制的.如果设备作为DEVICE设备,这时候VBUS的电是由外部提供的,比如通过USB线和电脑连 ...

  9. linux vi 不小心按了ctrl z 怎么办,linux vi 中按了ctrl+s后没法退出

    PerfMon.exe通过命令管理计数器 通过PerfMon命令可以管理计数器,添加删除调整等等. 例1:Logman:在本地和远程系统上,管理和调度性能计数器和事件跟踪日志. master..xp_ ...

最新文章

  1. Unity3D心得分享
  2. 宏基因组蚂蚁森林合种——胡杨专车
  3. xpath的数据和节点类型以及XPath中节点匹配的基本方法
  4. 【大学课程】计算机网络知识点
  5. 《女仆咖啡帕露菲》香浓背后,激励的力量
  6. vue中使用Vue-pdf在线预览
  7. clickhouse的ReplacingMergeTree引擎实战
  8. 利用mysql数据库中_利用mysql和mysqli取得mysql的所有数据库和库中的所有表
  9. mysql数据库无法显示中文_mysql数据库不能显示中文是怎么回事呢?
  10. ubuntu系统下hbase数据库的安装和使用,hbase配置文件详解
  11. 仿360加速球。(实现内存释放)
  12. python+pdf2docx+tkinter PDF转word小工具打包成exe
  13. 《美国职业橄榄球大联盟》:NFL·王牌四分卫
  14. 我的wow血精灵圣骑士,晒晒
  15. chrome插件开发总结
  16. Jbrowse中的BigWig Tracks配置
  17. Android 中的 Canvas API
  18. 职业化形象与商务礼仪
  19. 组一套《头号玩家》里的 VR 套装,要多少钱?
  20. charles的使用

热门文章

  1. 捕获海康威视IPCamera图像,转成OpenCV能够处理的图像(二)
  2. 基于Java Web的流浪猫狗救助网站
  3. android查询cpu信息
  4. 白竹机器人_白术防风黄芪功效作用
  5. 新版正方教务系统Java爬取_正方教务系统成绩爬取(仅个人)+tk可视化
  6. 感量越大抑制频率约低_开关电源电磁兼容进级-EMI传导输入滤波器的设计理论(ED-TEST上海)...
  7. ROS_Kinetic_03 ROS入门向导
  8. 免费u盘数据恢复软件哪里找得到
  9. IDC机房维护的成本,和托管的成本对比
  10. cmd:发生系统错误 5。拒绝访问解决方法