天天看点

Linux 下的任务切换神器 Ctrl+Z

一、引言

不知道各位有没有遇到过如下囧境:”正在开心地使用 vim 编辑文件,突然发现忘记复制某些内容,只能暂时保存退出,复制好后重新打开文件继续编辑,或者干脆再打开一个终端,搞得十分凌乱?”。那有没有一种不退出 vim 程序,又能自由切到终端上执行其他命令的方法呢?当然有啦,而且不止一种(比如在

vim

命令模式下输入

:!command

,不过这并不是今天想要介绍的内容),今天我们就利用 Ctrl+Z 快捷键来实现。

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

在 Linux 系统中,按下 Ctrl+Z 实际上是向当前程序发送了

挂起

中断信号(SIGTSTP),作用是将其挂起并放入后台。注意,挂起之后,程序就停止执行了,但是并没有退出。例如,我们编辑一个文件

vim file.txt

,输入些内容后,然后在命令模式,按下

ctrl+z

[[email protected] tmp]# vim file.txt
add some contents
// 按下 ctrl+z

[3]+  Stopped                 vim file.txt
           

我们会回到终端,可通过

ps -aux | grep file.txt | grep -v grep

查看进程状态:

[[email protected] 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

命令,可以查看当前,后台进程有哪些:

[[email protected] tmp]# jobs -l
[1]+ 32034 Stopped                 vim file.txt
           

可以看到,目前只有一个后台任务,编号为 1,状态为 Stopped。

我们可以通过执行

fg <job 编号>

将其唤醒到前台,(如果不加编号,则唤醒最近被放入后台的任务):

[[email protected] tmp]# fg 1
           

执行完该命令,我们就重新进入

vim file.txt

的编辑界面了,也就从终端重新进入了

vim

程序:

add some contents
~
~
-- INSERT --
           

值得一提的是,我们可以同时打开多个程序,按下

ctrl+z

将其分别临时挂起,然后通过

jobs

fg

命令的配合,在多个任务间自由切换,实现多任务管理。

[[email protected] tmp]# jobs
[1]   Stopped                 vim file.txt
[2]-  Stopped                 vim file-2.txt
[3]+  Stopped                 vim file-3.txt
[[email protected] tmp]# fg 2
           

附加说明:如果希望后台进程不维持在

后台停止

状态,而是让其继续执行,可以通过

bg

命令将其转为

后台执行

状态:

[[email protected] tmp]# jobs
[1]-  Stopped                 vim file.txt
[6]+  Stopped                 tail -f /etc/hosts
[[email protected] tmp]# bg 6
[6]+ tail -f /etc/hosts &
[[email protected] tmp]# jobs
[[email protected] tmp]# jobs
[1]+  Stopped                 vim file.txt
[6]-  Running                 tail -f /etc/hosts &
           

可以看到,起初通过执行

ctrl+z

挂起的 6 号进程是

Stopped

的,通过执行

bg 6

,其状态变为

Running

了。

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

kill -l

[[email protected] tmp]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) 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 终端下的多任务管理!

继续阅读