当用 bash 启动一个程式, 你可以用在程式后加&, 实现程式在后台执行;
例如: emacs &
但如果你忘了输入&; 但你又不想把程式停止后重新启动;
你可以这么做:
按 Ctrl + Z 暂停前台工作, 比如前面提到的 Emacs;
然后用 jobs 命令检视当前 bash 一共启动了多少程式, 你可以看到你的 emacs 在其中,它的状态是 Stoped 的; 并且它的 jobID 也可以看, 比如是 2
然后用命令 bg 2
这样你就可以达到和 emacs & 一样的效果了。
当你有些工作比如 updatedb, find 等需要一定时间, 这些工作可以考虑让它在后台执行, 而你可以用 bash 做其它工作。
A
Shell 支援作用控制,有以下命令:
1. command& 让程序在后台执行
2. jobs 检视后台执行的程序
3. fg %n 让后台执行的程序 n 到前台来
4. bg %n 让程序 n 到后台去;
PS:”n” 为 jobs 检视到的程序编号.
B
fg 、 bg 、 jobs 、& 、 ctrl + z 都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。 ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。 jobs
检视当前有多少在后台执行的命令
四。 fg
将后台中的命令调至前台继续执行
如果后台中有多个命令,可以用 fg %jobnumber 将选中的命令调出,%jobnumber 是通过 jobs 命令查到的后台正在执行的命令的序号 (不是 pid)
五。 bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用 bg %jobnumber 将选中的命令调出,%jobnumber 是通过 jobs 命令查到的后台正在执行的命令的序号 (不是 pid)
C
Linux 下使用 Shell 命令控制任务 Jobs 执行
下列命令可以用来操纵程序任务:
ps 列出系统中正在执行的程序;
kill 传送讯号给一个或多个程序(经常用来杀死一个程序);
jobs 列出当前 shell 环境中已启动的任务状态,若未指定 jobsid,则显示所有活动的任务状态资讯;如果报告了一个任务的终止 (即任务的状态被标记为 Terminated),shell 从当前的 shell 环境已知的列表中删除任务的程序标识;
bg 将程序搬到后台执行(Background);
fg 将程序搬到前台执行(Foreground);
D
将 job 转移到后台执行
如果你经常在 X 图形下工作,你可能有这样的经历:通过终端命令执行一个 GUI 程式,GUI 介面出来了,但是你的终端还停留在原地,你不能在 shell 中继续执行其他命令了,除非将 GUI 程式关掉。
为了使程式执行后终端还能继续接受命令,你可以将程序移到后台执行,使用如下命令执行程式:
#假设要执行 xmms
$xmms &
这样开启 xmms 后,终端的提示又回来了。现在 xmms 在后台执行著呢;但万一你执行程式时忘记使用 “&” 了,又不想重新执行;你可以先使用 ctrl+z 挂起程式,然后敲入 bg 命令,这样程式就在后台继续执行了。
E
概念:当前任务
如果后台的任务号有 2 个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码 “[2]” 的后台任务。所以可以得出一点,即当前任务是会变动的。当使用者输入 “fg” 、 “bg” 和 “stop” 等命令时,如果不加任何引号,则所变动的均是当前任务。
F
察看 jobs
使用 jobs 或 ps 命令可以察看正在执行的 jobs 。
jobs 命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l 选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated, 但是如果任务被终止了(kill),shell 从当前的 shell 环境已知的列表中删除任务的程序标识;也就是说,jobs 命令显示的是当前 shell 环境中所起的后台正在执行或者被挂起的任务资讯;
G
程序的挂起
后台程序的挂起:
在 solaris 中通过 stop 命令执行,通过 jobs 命令检视 job 号 (假设为 num),然后执行 stop %num;
在 RedHat 中,不存在 stop 命令,可通过执行命令 kill -stop PID,将程序挂起;
当要重新执行当前被挂起的任务时,通过 bg %num 即可将挂起的 job 的状态由 stopped 改为 running,仍在后台执行;当需要改为在前台执行时,执行命令 fg %num 即可;
H
前台程序的挂起:
ctrl+Z;
I
程序的终止
后台程序的终止:
方法一:
通过 jobs 命令检视 job 号(假设为 num),然后执行 kill %num
方法二:
通过 ps 命令检视 job 的程序号(PID,假设为 pid),然后执行 kill pid
前台程序的终止:
ctrl+c
kill 的其他作用
kill 除了可以终止程序,还能给程序传送其它讯号,使用 kill -l 可以察看 kill 支援的讯号。
SIGTERM 是不带引数时 kill 传送的讯号,意思是要程序终止执行,但执行与否还得看程序是否支援。如果程序还没有终止,可以使用 kill -SIGKILL pid,这是由核心来终止程序,程序不能监听这个讯号。