- 本系列文章,将整理一系列Linux环境下进程相关的操作命令,包括进程启动、kill、挂起、查看、前后台进程切换等各种命令。
- 本文为本系列的第四篇,进程的切换,主要关注如何在前后台切换一个作业。
ctrl + z
- 可以将一个正在前台执行的命令放到后台,且处于暂停状态,不可执行;
- 一般和bg命令配合使用:先ctrl + z再bg,这样进程就被移到后台运行,终端还能继续接受其他命令;
&
- 加在一个命令的最后,可以把这个命令放到后台执行 ,如:
[qxhgd@localhost ~]$ sudo vsftpd & [1] 2368
jobs
- 作业控制中的关键命令是jobs命令,jobs可显示 Linux 中的任务列表及任务状态,包括后台运行的任务(包括使用ctrl+z或&操作过的任务);
- jobs命令中输出有加号和减号,带加号的作业被当做默认作业,带减号的为下一个默认作业;
- 该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。
- jobs 只限于某个控制台,控制台间彼此不通用,A控制台中的job ,在B控制台用jobs 看不到 ,但是用ps -aux 可以看到相应进程;
- job 不管是在前台还是在后台,也不管什么状态,其依赖于所在的控制台,关闭控制台后所有job 将不复存在;
- job在后台运行时,不会被ctrl+c中断,但是输出仍然会显示到屏幕上,如果不希望输出,则可借助/dev/null设备;
[qxhgd@localhost ~]$ jobs [1]- Stopped top [2]+ Stopped top
fg
- 将后台中的命令调至前台继续运行;
- 如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid);
[qxhgd@localhost ~]$ sudo vsftpd& [1] 8103 [1]+ Stopped sudo vsftpd [qxhgd@localhost ~]$ jobs [1]+ Stopped sudo vsftpd [qxhgd@localhost ~]$ fg 1 sudo vsftpd [sudo] password for qxhgd: [qxhgd@localhost ~]$ jobs [qxhgd@localhost ~]$ ps -aef | grep vsftpd root 1324 1 0 Apr10 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf qxhgd 8125 7943 0 05:54 pts/1 00:00:00 grep --color=auto vsftpd
bg
- 将一个在后台暂停的命令,变成继续执行 (在后台执行);
- 如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid);
- 一个综合的例子,按top->ctrl+z->jobs->bg操作:
[qxhgd@localhost ~]$ top top - 05:58:07 up 6:02, 2 users, load average: 0.01, 0.20, 0.23 Tasks: 271 total, 1 running, 270 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1863076 total, 150012 free, 872996 used, 840068 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 807612 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8192 qxhgd 20 0 162160 2304 1532 R 12.5 0.1 0:00.02 top 1 root 20 0 125604 4184 2628 S 0.0 0.2 0:02.86 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd ... [1]+ Stopped top [qxhgd@localhost ~]$ jobs [1]+ Stopped top [qxhgd@localhost ~]$ bg 1 [1]+ top &