`
panshaobinSB
  • 浏览: 202895 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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,这是由内核来终止进程,进程不能监听这个信号。

1.7 ps 命令
该命令用户列出系统中正在运行的进程。 常用的参数:ps -ef

关于这2个参数含义,参考ps 命令的帮助:
[oracle@singledb ~]$ ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy


二. 前台进程和后台进程的一点讨论
整理这篇文章的目的就是弄清楚在实际使用中这两种进程的区别。 一般情况下,我们都是通过shell 连接到linux 服务器上,
那么,假如我们在这个shell 窗口执行一个备份或者其他命令,即前台命令。
在这个时候,前台命令没有执行完,我们把这个终端关闭了,那么这个命令也就会中断。
即使我们在执行命令时加了&符号,让进程在后台执行,终端的关闭也会造成命令的结束。


解决这个问题有两种方法:
(1)将命令添加到crontab里,让系统自己调用。
这种方法将使命令在服务器端执行,这样即使终端关闭,也不影响命令的执行。
(2)使用nohup命令(no hang up)。
该命令用于保证不挂断地运行命令。如:
[oracle@singledb ~]$ nohup /u02/rman_incremental_backup.sh &
[1] 4409
[oracle@singledb ~]$ jobs
[1]+ Running nohup /u02/rman_incremental_backup.sh &

这里要注意:
运行nohup命令后,按任意键返回shell 窗口,然后输入 exit 退出终端,不能直接关闭窗口,直接关闭窗口的话,还是会造成命令进程和终端一起结束。

在Unix中永久的后台进程称为守护进程(daemon)。守护进程通常从系统启动时自动开始执行,系统关闭时才停止。
而nohup 启动的进程虽然也是不中断的执行,但是当进程执行完毕后就会退出。
分享到:
评论

相关推荐

    Linux后台运行命令

    ### Linux后台运行命令详解 #### 一、引言 在Linux操作系统中,用户可以通过各种方式启动后台任务。本文将重点介绍几种常用的Linux后台运行命令,包括快捷键方式以及`cron`和`crontab`命令的详细使用方法。这两种...

    linux命令在后台运行

    ### Linux命令在后台运行详解 #### 一、引言 在Linux系统中,有时我们需要运行一些长时间的任务,例如数据处理或脚本执行等。这些任务可能会持续很长时间,而且在这个过程中,用户可能还需要继续使用终端执行其他...

    linux 进程前后台切换命令

    要使一个进程在后台运行,有两种方式: ##### 2.1 使用 `&` 符号 ```bash sh ./start.sh & ``` 这种方式会在命令行后面加上 `&`,表示这个命令在后台执行。执行完毕后,命令行不会返回提示符,而是显示该进程的进程...

    LinuxJobs等前后台运行命令解.docx

    LinuxJobs 等前后台运行命令解是一种常用的 Linux 命令,用于控制和管理进程的执行。该命令可以将进程放到后台运行,以便释放当前 Shell 会话,或者将后台进程调回前台继续执行。 Shell 支持作用控制,有以下命令...

    linux后台运行m(matlab)文件

    本文介绍了如何在 Linux 系统中后台运行 MATLAB 文件,包括使用 nohup 命令和 Terminal 运行 MATLAB 文件两种方法。同时,强调了环境变量设置的重要性。后台运行 MATLAB 文件可以提高系统资源利用率和工作效率。

    在后台运行Linux命令的方法

    在Linux系统中,后台运行命令是一项非常实用的功能,它允许用户在执行长时间运行的程序时,继续在同一个shell会话中进行其他操作。这主要通过将命令与`&`符号结合来实现。例如,要将命令`command`放到后台运行,只需...

    Linux后台运行py服务程序1

    在Linux系统中,后台运行服务...掌握这些命令和技巧,你就能更有效地管理和控制在Linux系统中后台运行的服务程序,确保它们在你需要的时候持续工作,而不会因为终端的关闭而中断。这在系统维护和自动化任务中尤其有用。

    在Linux中查看及终止正在运行的后台程序方法

    linux 任务管理-后台运行与终止 fg、bg、jobs、&、ctrl + z命令 一、 & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可...

    详解linux后台运行和关闭、查看后台任务

    本篇文章将详细解析Linux后台运行、关闭以及查看后台任务的相关命令,包括fg、bg、jobs、&、nohup、ctrl+z和ctrl+c。 首先,`&`是一个常用的命令,用于将命令放到后台执行。例如,`watch -n 10 sh test.sh &`这条...

    Linux后台运行java的jar包.docx

    ### Linux后台运行Java的JAR包详解 #### 核心知识点概述 本文旨在详细介绍如何在Linux环境下后台运行Java JAR包的各种方法及其背后的原理。针对不同的需求,文章提供了多种策略来确保程序能够在脱离用户交互的情况...

    Linux中进程在后台可靠运行的方法总结

    nohup通过忽略HUP信号实现进程的后台运行,而setsid则通过创建新的会话使得进程不受终端影响。根据具体需求,可以选择合适的方法,或者组合使用,以保证进程的稳定性和持久性。在实际操作中,应根据任务的性质和预期...

    Linux下运行后台任务的方法.docx

    可以使用 ctrl + z 将进程放到后台暂停,然后使用 jobs 查看当前有多少在后台运行的命令,使用 bg 将后台中暂停的作业进程继续运行,使用 fg 将后台中的作业进程调至前台继续运行。 例如: ctrl + z 将 ./test.sh ...

    Linux查看和关闭后台运行程序的方法

    在Linux操作系统中,管理和操作后台运行的程序是日常运维工作中不可或缺的部分。后台程序是指那些即使在用户退出终端或关闭shell会话后仍能继续运行的进程。本篇将详细介绍如何在Linux系统中查看和关闭这些后台运行...

    Ruby-轻松实现在Linux服务器上后台运行RubyRails进程

    首先,了解在Linux上后台运行程序的基本概念。通常,当我们在终端中执行命令时,该命令会在前台运行,占用终端会话。如果要让进程在后台运行,可以使用`&`符号,例如`ruby myapp.rb &`。然而,这种方法并不完美,...

    linux系统简单命令

    * job 命令:用于在后台运行一个进程。 * kill 命令:用于发送信号给一个进程。 五、系统信息命令 * ps 命令:用于查看进程信息。 * uname 命令:用于查看内核版本。 * cat /etc/issue 命令:用于查看 Ubuntu 版本...

    Linux任务前后台的切换

    在命令后面加上“&”可以使该命令在后台运行,例如:“command &”。这样做后,命令会立即返回Shell提示符,而不是等待命令执行完成。这对于那些需要长时间运行但不需要用户交互的任务非常有用,比如深度学习模型的...

    Linux后台进程管理的一些命令小结.pdf

    在Linux中,如果你希望一个命令在后台继续运行,可以在命令末尾添加"&"符号。例如,`command &`会让命令在后台启动。如果当前正在运行的命令你想暂停并放到后台,可以先按`Ctrl + Z`,这会将进程挂起。然后,你可以...

    在Linux终端中使用后台运行模式启动程序的方法.docx

    本文将详细介绍如何在Linux终端中使用后台运行模式启动程序的方法,包括基本的启动方式、使用特定符号来标记后台进程、以及使用`nohup`命令来确保程序在终端关闭后仍能持续运行。 #### 二、基本概念 在Linux中,...

    linux后台执行命令&和nohup的具体使用方法

    `nohup` 命令则更加高级,它允许你在退出登录或关闭终端后继续运行命令。使用 `nohup` 的基本语法是: ```bash nohup command & ``` 这使得即使终端断开连接,命令也能持续运行。默认情况下,`nohup` 会将输出...

Global site tag (gtag.js) - Google Analytics