日期:2014-05-16  浏览次数:20789 次

linux前台,后台运行命令的区别
Linux 前台 和 后台进程 说明Linux 前台 和 后台进程 说明

           
一. 有关进程的几种常用方法
1.1 & 符号
在命令后面加上一个 & 符号,表示该命令放在后台执行,如:
[oracle@singledb ~]$ crontab -l
20 17 * * * /u02/rman_incremental_backup.sh &

1.2 Jobs 命令
该命令可以查看当前有多少在后台运行的命令,jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息。

  jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的 PID ,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息。 如:
[oracle@singledb ~]$ jobs
[1]+ Running /u02/rman_incremental_backup.sh &

在这里讲一个概念:当前任务
  如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,
第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码[2]的后台任务。
所以可以得出一点,即当前任务是会变动的。当用户输入fg、bg和stop等命令时,如果不加任何引号,则所变动的均是当前任务。

1.3 fg 命令(foreground)
该命令将后台运行的进程调到前台来运行。 具体用法: fg %n
这里的N 是jobs 看到的jobnumber。 如:

[oracle@singledb ~]$ fg %1
-bash: fg: job has terminated
[1]+ Exit 1 /u02/rman_incremental_backup.sh > /u02/rman.log 2>&1

1.4 ctrl + z 组合键
该命令将一个正在前台执行的命令放到后台,并且暂停。

1.5 bg命令(background)
该命令将一个在后台暂停运行的命令,变成继续在后台执行的命令。
用法:bg %n。 N 是jobs命令查看到的jobnumber。 如:

[oracle@singledb ~]$ /u02/rman_incremental_backup.sh
[1]+ Stopped /u02/rman_incremental_backup.sh
-- 我们运行备份命令,然后按下CTRL+Z
[oracle@singledb ~]$ jobs
[1]+ Stopped /u02/rman_incremental_backup.sh
--用jobs查看进程状态
[oracle@singledb ~]$ fg %1
/u02/rman_incremental_backup.sh
--用fg将进程调到前台运行
[1]+ Stopped /u02/rman_incremental_backup.sh
--按下ctrl+z
[oracle@singledb ~]$ bg %1
[1]+ /u02/rman_incremental_backup.sh &
--用bg将后台暂停的进程继续执行,这里自动加了一个& 符号
[oracle@singledb ~]$ jobs
[1]+ Running /u02/rman_incremental_backup.sh &
--查看job 状态

1.6 结束正在运行的进程
1.6.1 结束前台进程
这种只需要按下组合键: ctrl + c 即可。

1.6.2 结束后台运行的进程
这种情况下也有两种方法:
(1)用jobs查看进程的jobnumber,然后用命令:kill %n 来结束。
(2)用ps 查看进程的pid,然后用命令:kill pid 来结束。

这里对kill 做点说明,kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。

[oracle@singledb ~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 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

  SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。
如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。