热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux查看和关闭后台执行程序

后台执行的程序会有一个pid,查看后台程序主要用到jobs,ps关闭后台程序用到kill详细说明转自http:blog.csdn.nettianlesoftwarearticled
后台执行的程序会有一个pid,查看后台程序主要用到jobs,ps 关闭后台程序用到kill

详细说明转自http://blog.csdn.net/tianlesoftware/article/details/6165753
一. 有关进程的几种常用方法

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。 是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       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

 

  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

 all processes on this terminal     -s processes in the sessions given

 all w/ tty, including other users  -t by tty

 OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)

 only running processes              processes for specified users

 processes w/o controlling ttys      by tty

*********** output format **********  *********** long options ***********

-o,o user-defined  -f full            --Group --User --pid --cols --ppid

-j,j job control    signal          --group --user --sid --rows --info

-O,O preloaded -o   virtual memory  --cumulative --format --deselect

-l,l long           user-oriented   --sort --tty --forest --version

-F   extra full     registers       --heading --no-heading --context

                    ********* misc options *********

-V,V  show version       list format codes   ASCII art forest

-m,m,-L,-T,H  threads    children in sum    -y change -l format

-M,Z  security data      true command name  -c scheduling class

-w,w  wide output        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 启动的进程虽然也是不中断的执行,但是当进程执行完毕后就会退出。



推荐阅读
  • 本文转载自:https:blog.csdn.netu924512005articledetails70655272详细了解FPGAselectIO是学习FPGA基础 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 一、概述nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,相对于其它一些系统资源监控工具来说,nmon所记录的信息是比较全面的 ... [详细]
  • UMTS基础知识汇总
    协议框架23G接口UMTS实体EntityNameDescriptionAuCAuthenticationCenterCBCCellBroadcastCenterC-RNCCon ... [详细]
  • #这段代码的作用是实现在地图中随机导航。在ros下需要先加载机器人和相关配置,详请参阅古-月的博客http:blog.csdn.nethcx25909articledetails121 ... [详细]
  • Linux学习笔记:psef、ps aux、kill9
    一、查看进程命令1.ps命令Linux中的ps命令是ProcessStatus的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就 ... [详细]
  • linux 循环 cpu使用率脚本,Linux Shell脚本监视CPU利用率,达到设置的CPU利用率时发送电子邮件...
    有很多开源监控工具可用于监控Linux系统性能,当系统达到给定的阈值限制时,它将发送电子邮件警报。它监视CPU利用率、内存利用率、交换利用率、磁盘空间利 ... [详细]
author-avatar
真实的姜伯约_832
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有